[英]Execute SQL Task -Full Result Set Datatype Mismatch Error
我正在創建一個具有執行SQL任務的SSIS程序包,並將結果集變量傳遞給每個循環容器的。 我的SQL查詢是:
Select distinct code from house where active=1 and campus='W'
我希望execute sql任務運行此查詢並將其結果分配給一個變量,該變量將傳遞給每個循環容器,該循環容器應遍歷結果集中的所有值。
但是我的執行sql任務失敗並出現錯誤:
分配給變量“ User :: house”的值的類型(DBNull)與當前變量類型(String)不同
現在,我已經完成了研究,並嘗試分配了變量數據類型Object,但是沒有用。 我嘗試在SQL查詢中使用強制轉換,但也無法正常工作。
由於查詢返回多行和一列,因此我不確定如何為整個查詢分配數據類型?
樣品:
變量“ User :: house”是string,那么,您是否在結果集中使用了它?
聽起來您這里有很多問題。
首先是在Execute SQL Task中,並且需要在Result Set
規范和“結果集”選項卡中指定的變量的數據類型之間達成協議。 如果指定完整結果集,則接收對象的類型必須為System :: Object,並且將只有1個結果集。 使用的連接管理器(ODBC / OLE / ADO)的類型將確定如何指定它,但是在這些高級論壇上可以無限地搜索它。
其他兩個選項是“單行”和“ XML”。 在使用SSIS的13年中,我從來沒有理由指定XML。 剩下的就是單行。 對於單行結果集,您需要為返回的每一列提供一個變量, 並且需要正確鍵入。
若要更正您的問題,您需要聲明第二個變量。 我通常調用rsObject(記錄集對象),然后將數據類型指定為System.Object。
然后,將為您的For Each循環容器設置一個帶有“ Foreach ADO Enumerator”的枚舉數,然后ADO對象的源變量將變為“ User :: rsObject”
在變量映射中,將指定變量User :: house索引為0。
給定樣本源數據集,您可以驗證自己的Execute SQL Task是否已將結果集正確分配給我們的對象,並且Foreach循環容器正在正確填充我們的變量。
SELECT DISTINCT
code
FROM
(
VALUES
('ABC', 1, 'w')
, ('BCD', 1, 'w')
, ('CDE', 0, 'w')
, ('DEF', 1, 'w')
, ('EFG', 1, 'x')
) house(code, active, campus)
WHERE
active = 1
AND campus = 'w';
如果將校園的價值從w
更改為不存在的值(如f
則一切將繼續進行。
但是,僅當代碼為NULL時,才會生成您收到的錯誤
向VALUES集合中再添加一個條目,例如
, (NULL, 1, 'w')
當“每個循環容器”達到該值時,您將遇到指示的錯誤
分配給變量“ User :: house”的值的類型(DBNull)與當前變量類型(String)不同
SSIS變量不能更改其數據類型,除非它們屬於Object類型(但這不是解決方案)。 “問題”是您不能在SSIS變量中存儲NULL值(除非它是object類型)。 因此,您需要排除返回NULL的行( AND code IS NOT NULL
),或者需要將NULL強制轉換為哨兵/占位符值(作為替代SELECT DISTINCT ISNULL(code, '') AS code
)( SELECT DISTINCT ISNULL(code, '') AS code
)。 如果一個空字符串是一個有效值,那么您需要查找的不是-“ billinkcisthegreatestever10123432”在您的代碼集中不太可能存在,但是可能有點過多。
最后,考慮將SSIS變量從house
重命名為code
。 您也許可以使事情變得簡單,但是總有一天您會將這段代碼移交給其他人進行維護,而又不想讓他們感到困惑。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.