[SSIS][SSDT]在非英文版的環境下無法正常使用 SSIS 的 DATA TAP 功能
SQL Server 2012 推出後,在 SSIS 上做了不少的強化,特別是有新的專案部屬模式,想了解該部分的可以參考另外一篇文章「小試專案部署模式( Project Deployment Model ) 和參數 ( Parameter )使用」,加上在 SSMS 又有提供 「Intergration Services 儀表板」,因此非常推薦需要進行 ETL的時候來搭配使用。
而昨天有朋友在使用上遇到一些問題,他參考了 MSDN 上的文章「資料流程點選」,怎麼實作都無法正常運作,因此想要詢問是否有甚麼特殊限制。剛收到這個問題的時候,從他所寄出來的畫面和程式碼,實在看不出有甚麼異常,因此我就想說自己弄個環境來測試一下。
在測試過程中我弄了比較單純一點,基本上就只有放一個資料流程
這裡面很單純的抓資料做匯出
也可以很順利的部屬到 SSISDB 上
測試一下封裝是可以正常執行的
因此我們調整一下 SQL,加入 DATA TAP 的處理。這時候我們先從 VS 2013 上看到 IdentificationString 的值是「路徑[X.ADO NET 來源輸出]」
因此在設定 DATA TAP 的時候,就指定該路徑名稱來進行
Declare @execution_id bigint
EXEC [SSISDB].[catalog].[create_execution] @package_name=N'Package.dtsx', @execution_id=@execution_id OUTPUT, @folder_name=N'Sample', @project_name=N'Integration Services 專案3', @use32bitruntime=False, @reference_id=Null
Select @execution_id
DECLARE @var0 smallint = 1
-- 加入 DATA TAP
EXEC [SSISDB].[catalog].[add_data_tap] @execution_id, N'\PACKAGE\A' , N'路徑[X.ADO NET 來源輸出]','DEMO.csv'
--
EXEC [SSISDB].[catalog].[set_execution_parameter_value] @execution_id, @object_type=50, @parameter_name=N'LOGGING_LEVEL', @parameter_value=@var0
EXEC [SSISDB].[catalog].[start_execution] @execution_id
GO
果然就發生錯誤了
從錯誤訊息中看起來,似乎我們所指定的路徑名稱,在 DATA TAP 中無法辨識才導致問題的。但看起來我們設定是沒有錯的,因此懷疑會不會是因為有中文才導致有問題,所以我就重新弄了一個英文版的環境來做測試,重新作了一個封裝,此時也加入 DATA TAP 的處理
Declare @execution_id bigint
EXEC [SSISDB].[catalog].[create_execution] @package_name=N'Package.dtsx', @execution_id=@execution_id OUTPUT, @folder_name=N'Demo', @project_name=N'DataTap', @use32bitruntime=False, @reference_id=Null
Select @execution_id
DECLARE @var0 smallint = 1
-- 加入 DATA TAP
EXEC [SSISDB].[catalog].[add_data_tap] @execution_id, N'\Package\A', N'Paths[X.ADO NET Source Output]' , 'Demo.csv'
--
EXEC [SSISDB].[catalog].[set_execution_parameter_value] @execution_id, @object_type=50, @parameter_name=N'LOGGING_LEVEL', @parameter_value=@var0
EXEC [SSISDB].[catalog].[start_execution] @execution_id
GO
這樣執行就都沒有問題了
這樣看起來似乎是中文的問題,但因為 IdentificationString 的值是我們所不能更改的,所以我在想會不會是全部改成英文,這樣或許就可以正常了,因此調整了一下把他改成全英文,但執行起來還是有問題
因此我就把原本在繁體中文下所設計好的封裝,拿到英文版本的 Visual Studio 上去開啟,此時會發現原來IdentificationString 的值應該要是「Paths[X.ADO NET 來源輸出]」
因此重新調整原本的 SQL 指令,改成如下的方式
Declare @execution_id bigint
EXEC [SSISDB].[catalog].[create_execution] @package_name=N'Package.dtsx', @execution_id=@execution_id OUTPUT, @folder_name=N'Sample', @project_name=N'Integration Services 專案3', @use32bitruntime=False, @reference_id=Null
Select @execution_id
DECLARE @var0 smallint = 1
-- 加入 DATA TAP
EXEC [SSISDB].[catalog].[add_data_tap] @execution_id, N'\PACKAGE\A' , N'Paths[X.ADO NET 來源輸出]','DemoX.csv'
EXEC [SSISDB].[catalog].[add_data_tap] @execution_id, N'\PACKAGE\A' , N'Paths[Y.衍生的資料行輸出]','DemoY.csv'
--
EXEC [SSISDB].[catalog].[set_execution_parameter_value] @execution_id, @object_type=50, @parameter_name=N'LOGGING_LEVEL', @parameter_value=@var0
EXEC [SSISDB].[catalog].[start_execution] @execution_id
GO
這樣就可以正常了
所以看起來是中文版本的 SQL Server Data Tools - Business Intelligence for Visual Studio 2013 把不該翻譯的字給翻譯了,才導致有這樣的問題。但那麼這樣的問題,在 SQL Server 2012 搭配 SSDT 的狀況下,測試一下也是會有這樣的狀況,看起來應該這個問題在 SQL Server 2012 和 SQL Server 2014 下都會有這樣的問題,如果要使用 DATA TAP 的話,可能也要注意一下。