错误:分配给变量" User ::的值的类型(DBNull)与当前变量类型(String)不同

时间:2017-07-13 11:54:04

标签: sql sql-server ssis

我正在创建一个SSIS包,并在提取数据时收到以下错误。

错误:分配给变量" User :: dunsId"的值的类型(DBNull);与当前变量类型(String)不同。变量在执行期间可能不会更改类型。变量类型是严格的,除了Object类型的变量。

dunsId是源表中的varchar(150),它是可空列并包含Null值。 我在SSIS中创建的用于映射它的变量是string类型。我基本上试图提取所有他的记录并将其插入包含列dunsId是varchar(150)的目标表中

这是我的插入查询

INSERT INTO Parties (companyId, dunsId, companyName, companyTypeId,companyTypeName,companyStatusTypeId,companyStatusTypeName,simpleIndustryId,simpleIndustryDescription)  
values (companyId, dunsId, companyName, companyTypeId, companyTypeName,companyStatusTypeId,companyStatusTypeName,simpleIndustryId,simpleIndustryDescription)

参数映射 enter image description here

变量

enter image description here

设计

enter image description here

2 个答案:

答案 0 :(得分:3)

解决问题的方法很少:

  1. 最简单的方法是将数据类型从string更改为object
  2. 从第一个Execute SQL task开始,在问题列中放置ISNULL,这将确保输出为string
  3. 使用一些其他方式,例如Source中的Destination加载到DataFlow taskExecute SQL task使用INSERT INTO target_table SELECT...FROM Source_table语句
  4. <强>更新

    正如您所提到的,您使用stored procedure输出列,然后您可以使用语句INSERT INTO target_table EXEC your_usp代替上面的方法3

答案 1 :(得分:0)

dunsId变量的变量类型为STRING,并且您尝试在运行时为此变量NULL分配一个值,即查询返回列NULL的{​​{1}}变量类型String不支持,请将其声明为dunsId类型。

enter image description here