Ssis

SSIS - ODBC 參數大小

  • March 24, 2015

我創建了一個 SSIS 包,它每小時從我的機器上執行一次。我的包的第一部分執行一個執行 SQL 任務,結果集(單行單列)是一個逗號分隔的唯一記錄 ID 列表,這些 ID 在過去一小時內已更新。(即FJ1,FJ2,FJ3)我在一個變數中擷取這個結果,當我執行使用者腳本任務來顯示這個屬性的值時,它應該是這樣的。

我使用儲存過程將此變數傳遞給在不同的 ODBC 伺服器上執行 SQL 任務

我的 SQL 語句如下

call DeleteRowsById(?)

然後我將我的變數(作為 SQL_Longvarchar)分配給參數映射部分中的參數 1。(ParameterSize 為 -1)但它不會從表中刪除記錄。(我在 Workbench 中手動執行了 SP,它按預期工作)然後我有了一個想法,作為我的 SP 的一部分,我開始在 Temp 表中輸入條目,以查看即將出現的變數。在表中插入僅顯示變數中的第一個字元,這就是它不刪除任何記錄的原因。

有人可以指出我正確的方向,因為我找不到我的變數被截斷的原因。

我知道這是不久前問過的,但也許其他人會偶然發現這個答案,而不是花費我一直在抨擊這個問題的多個小時。

事實證明,您需要對變數使用 SQL_WVARCHAR 類型。

以下是我的證據,展示了 SQL_WVARCHAR 的工作原理。

來自 SQL Profiler 的 OLEDB 命令:

exec sp_executesql N'exec dbo.usp_InsertJobLogODBC @P1,@P2,@P3,3,''Task [TestBIMLPackage] Starting''',N'@P1 varchar(6),@P2 varchar(2),@P3 varchar(10)','TestMe','01','2015-03-24'

來自 SQL Profiler 的 ODBC 命令使用 SQL_VARCHAR

declare @p1 int
set @p1=NULL
exec sp_prepexec @p1 output,N'@P1 varchar(6),@P2 varchar(2),@P3 varchar(10)',N'exec dbo.usp_InsertJobLogODBC @P1,@P2,@P3,3,''Task [TestBIMLPackage] Starting''','T','0','2'
select @p1

來自 SQL Profiler 的 ODBC 命令使用 SQL_CHAR

declare @p1 int
set @p1=NULL
exec sp_prepexec @p1 output,N'@P1 char(20),@P2 char(20),@P3 char(20)',N'exec dbo.usp_InsertJobLogODBC @P1,@P2,@P3,3,''Task [TestBIMLPackage] Starting''','T                   ','0                   ','2                   '
select @p1

來自 SQL Profiler 的 ODBC 命令使用 SQL_WVARCHAR

declare @p1 int
set @p1=1
exec sp_prepexec @p1 output,N'@P1 nvarchar(20),@P2 varchar(20),@P3 nvarchar(20)',N'exec dbo.usp_InsertJobLogODBC @P1,@P2,@P3,3,''Task [TestBIMLPackage] Starting''',N'TestMe','01',N'2015-03-24'
select @p1

引用自:https://dba.stackexchange.com/questions/86003