2011年5月21日 星期六

SSIS資料類型對應的問題

  我有一個封裝,會從遠端FTP下載XML檔案到本機,然後用Foreeach迴圈容器列舉下載來的檔案,將完整檔案名稱寫入filename變數,然後將filename傳入當參數對XML檔作一些檢核,檢核成功之後再傳入filename給執行SQL工作(呼叫SP用OPENROWSET)將XML檔案寫回資料庫。

  原本排程執行都很正常的,突然之間發生錯誤,錯誤擷取訊息如下
  無法大量載入,檔案"c:\file\20110509(X&X-DDD01).XM" 不存在。

2011年5月15日 星期日

你知道Update陳述式更新欄位值的同時可指派給變數值嗎?

  你可曾注意到BOL關於UPDATE (Transact-SQL) 這章節裡,有下列這樣一行嗎?

   SET @variable = column = expression
  
  平常我為了取得Update後的某欄位值,通常會在Update之後再下一次Select去取得該欄位,但其實不用那麼麻煩

2011年5月14日 星期六

在指令碼元件中寫回ReadWriteVariables中的變數

  情況是在資料流程中,我有一SQL命令(OLE DB來源),中間利用多重傳遞,產生三個副本寫到三個不同的資料表ABC(OLE DB目的地),三個資料表ABC幾乎只有幾個欄位上的差異,一次只會傳遞一筆資料到三個資料表
  三個目的資料表都有個InsuranceID欄位,但是只有資料表A是設成identity,資料表BC都沒有設,然後每次傳遞三個資料表的InsuranceID都要一樣才行,要不然前端程式會對應不到,所以在SQL命令中已使用( ident_current('資料表A')+1)先取得InsuranceID了,這樣產生的三個副本就都一致啦
  我想順便取得這次的InsuranceID欄位值,方便我將InsuranceID值Update到另一個資料表去,但是我不想再下一次SQL命令啦,想到說我可以再用一個副本,然後用指令碼元件去接那個欄位,寫入變數供之後使用,這是我想到可以不用再下一次SQL命令做法,不知還有更簡單的方法嗎?
  問題來了,我想說只要在指令碼元件中寫一行code就行了,結果出現如下錯誤
在 PostExecute 外部無法使用已被鎖定進行讀取和寫入的變數集合。
ReadWriteVariables的設定如下圖

2011年5月6日 星期五

你知道SQL 2008有optimize for ad hoc workloads選項嗎?

  今天不小心逛到個部落格Do You Enable “Optimize for Ad Hoc Workloads”?,看到作者作了個投票,調查使用SQL Server 2008的有多少人啟用optimize for ad hoc workloads 選項,結果不知道這個選項所佔的比例竟然最高呢,我也屬於不知道這個選項的人,因為我還在用SQL 2005啊,當然不知道有這個選項
  不知道的沒有關係,重點是這篇文章衍生的幾篇文章,都是關於最佳化執行計畫快取的文章,我覺得都還滿有參考價值的,特此紀錄一下,也給各位參考,有興趣的自己點進去看吧!