none
SSIS中OLE DB命令的問題 RRS feed

  • 問題

  • 請問各位前輩

    小弟使用的是SQL 2005

    最近遇到在SSIS使用OLE DB命令的問題

    這OLE DB命令是不是只能使用很簡單的T-SQL啊?

    我發現若有用join或子查詢,都會出現我不知道該如何解決的錯誤

     

    下列指令在ssms執行正常

    update CUACCP5_Master_f
    set FLINE = 30
    from dbo.CUACCP5_Master_f as f1 inner join dbo.CUACCP5_Master_p as p1
    on (f1.idt_key = p1.idt_key )
    where p1.Key1= '2'

     

    當我放到OLE DB命令裡時,where那邊改成參數,如下

    update CUACCP5_Master_f
    set FLINE = 30
    from dbo.CUACCP5_Master_f as f1 inner join dbo.CUACCP5_Master_p as p1
    on (f1.idt_key = p1.idt_key )
    where p1.Key1= ?
    就會出現下列錯誤
    描述:無法繫結多重部分(Multi-Part)識別碼"p1.Key1"
     
    那我換set那邊改成參數,正常,如下
    update CUACCP5_Master_f
    set FLINE = ?
    from dbo.CUACCP5_Master_f as f1 inner join dbo.CUACCP5_Master_p as p1
    on (f1.idt_key = p1.idt_key )
    where p1.Key1= '2'
     
    我試過很多種狀況,只要where那邊改成參數就會出錯,好像是where那邊不允許有"."的情況下用參數耶,好怪,有前輩遇過這種問題嗎?
     
    我後來改用子查詢,像下面這樣
    update CUACCP5_Master_f
    set FLINE = 30
    from CUACCP5_Master_f
    where CUACCP5_Master_f.idt_key in
    (select idt_key from CUACCP5_Master_p where Key1 = ?)
    結果又出現下列錯誤
    描述:無法從具有 sub-select 查詢的 SQL 陳述式衍生參數資訊。 準備命令之前請先設定參數資訊。
    這錯誤我又不知該如何處理了
     
    其實我原本是用執行SQL工作裡面用cursor去作的
    可是執行起來實在太久,27萬筆資料,跑了快兩個小時
    才想到用OLE DB命令去做看會不會快一點
    可是就遇到瓶頸了
    不知各位前輩有沒有解決辦法
    感謝先
     
     
    2008年12月16日 上午 03:25

解答

  •  samsuen 寫信:

     

    可以試著這樣看看

     

    update CUACCP5_Master_f
    set FLINE = 30
    from dbo.CUACCP5_Master_f as f1 inner join dbo.CUACCP5_Master_p as p1
    on (
    f1.idt_key = p1.idt_key 
    and  p1.Key1= ?)
     
    將參數放至括號內

     

    感謝samsuen前輩提供意見

    不過還是會出現錯誤

    會出現"語法錯誤,使用權限違規或其他非特定錯誤"耶

    看來應該是無解了

    我後來的解決辦法是把那段寫在SP裡

    OLE DB命令在去執行那個SP

    不過這樣很麻煩...@@

     

    2009年1月6日 上午 08:08

所有回覆

  •  

    可以試著這樣看看

     

    update CUACCP5_Master_f
    set FLINE = 30
    from dbo.CUACCP5_Master_f as f1 inner join dbo.CUACCP5_Master_p as p1
    on (
    f1.idt_key = p1.idt_key 
    and  p1.Key1= ?)
     
    將參數放至括號內
    2009年1月4日 下午 02:49
  •  samsuen 寫信:

     

    可以試著這樣看看

     

    update CUACCP5_Master_f
    set FLINE = 30
    from dbo.CUACCP5_Master_f as f1 inner join dbo.CUACCP5_Master_p as p1
    on (
    f1.idt_key = p1.idt_key 
    and  p1.Key1= ?)
     
    將參數放至括號內

     

    感謝samsuen前輩提供意見

    不過還是會出現錯誤

    會出現"語法錯誤,使用權限違規或其他非特定錯誤"耶

    看來應該是無解了

    我後來的解決辦法是把那段寫在SP裡

    OLE DB命令在去執行那個SP

    不過這樣很麻煩...@@

     

    2009年1月6日 上午 08:08