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

问题描述 投票:0回答:3

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

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

dunsId 是源表中的 varchar(150),它是可以为空的列并且包含 Null 值。 我在 SSIS 中创建的用于映射它的变量是字符串类型。我基本上试图提取所有记录并将其插入到包含列 dunsId is 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

sql sql-server ssis
3个回答
10
投票

解决您问题的几种方法:

  1. 最简单的方法是将数据类型从
    string
    更改为
    object
  2. 从第一个
    Execute SQL task
    开始,将
    ISNULL
    放在问题列周围,这将确保输出是
    string
  3. 使用一些替代方法,例如在
    Source
    中从
    Destination
    加载到
    DataFlow task
    或使用一种
    Execute SQL task
    INSERT INTO target_table SELECT...FROM Source_table
    语句

更新

正如您所提到的,您使用

stored procedure
输出列,那么您可以使用语句
INSERT INTO target_table EXEC your_usp
而不是上面的方法
3


0
投票

我必须将结果转换为 VARCHAR(300),结果才能开始工作。

例如:

原文:

Select
   MyId
   MyName
From
   MyTable

修复:

Select
   MyId
   CAST(MyName as AS NVARCHAR(300)) AS MyName
From
   MyTable

-1
投票

dunsId
变量的变量类型是STRING,并且您尝试在运行时为此变量
NULL
分配值,即您的查询返回
NULL
dunsId
,该列不支持变量类型字符串,请将其声明为输入
Object

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.