2017-09-04 69 views
1

我使用VS2015與SSDT開發集成服務項目,爲SQL Server 2016部署SSIS包到服務器時,我所面臨的問題的一個例子:字符編碼問題,當部署SSIS包

我在測試數據庫中創建一個表(校對:SQL_Latin1_General_CP1_CI_AS)爲:

CREATE TABLE [dbo].[EncodingError](
[ID] [int] IDENTITY(1,1) NOT NULL, 
[Text] [nvarchar](20) NULL, 
[TimeStamp] [datetime2](7) NULL) ON [PRIMARY] 

然後我創建了一個新的SSIS項目(項目部署模型),然後添加到默認包連接管理器的測試數據庫和一個「執行SQL Task「的腳本:

INSERT INTO [dbo].[EncodingError](Text,TimeStamp) SELECT '¤' AS Text,GETDATE() AS TimeStamp 

當運行從VS包或部署整個項目到服務器(SSIS目錄)並運行包存在,它正確地插入行到表:

ID Text TimeStamp 
1 ¤  2017-09-04 12:13:54.3100000 
2 ¤  2017-09-04 12:14:26.2266667 

當我重新部署 - 現在這隻包的,而不是整個項目 - 服務器和我運行它再次將其插入該行是這樣的:

ID Text TimeStamp 
3 ¤  2017-09-04 12:16:16.8866667 

現在,當我再次重新部署整個項目它的正常工作。

在我僅部署了包之後,我使用嚮導創建了一個新的SSIS項目,以從服務器導回項目。在這種情況下,任務中的腳本顯示爲:

INSERT INTO [dbo].[EncodingError](Text,TimeStamp) 
SELECT '¤' AS Text 
     ,GETDATE() AS TimeStamp 

任何想法是什麼原因導致此行爲?如果我從字符編碼的角度來部署整個項目而不僅僅是包,那麼它有什麼區別?

回答