簡體   English   中英

執行SQL任務-全部結果集數據類型不匹配錯誤

[英]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查詢中使用強制轉換,但也無法正常工作。

由於查詢返回多行和一列,因此我不確定如何為整個查詢分配數據類型?

樣品:

  • 增強現實
  • 國陣
  • CN

變量“ 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 您也許可以使事情變得簡單,但是總有一天您會將這段代碼移交給其他人進行維護,而又不想讓他們感到困惑。

風景如畫的答案https://stackoverflow.com/a/13976990/181965

您需要為結果集聲明子“對象” var 結果集

然后為結果中的每個代碼聲明一個字符串變量

對於每個循環容器祝你好運

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM