首页 > 解决方案 > 数据类型转换导致 SSIS 包中的错误

问题描述

我有一个 SSIS 包,其中包含一个使用执行 SQL 任务创建临时表的步骤。

在这个查询中,我有一个 case 语句,类似于:

Cast(Case
    When billing_address is Like '%DONOTUSE%' Then 1
    When billing_address is Like '%DONTUSE%' Then 1 
Else 0
End as nvarchar)DoNotUseAccounts

我在不同的执行 SQL 任务中有一个更新语句,如下所示:

Update #StatementAccounts 
Set Issues = Issues + ' - Do Not Use Account' 
Where Product In ('prod1','prod2','prod3','prod4') 
     And DoNotUseCustomer= 1

执行包时,我收到一个错误:“错误:字符串或二进制数据将被截断。”

我是否使用了错误的数据类型?

更新语句是否也需要转换/转换?

任何指导都会有所帮助。

我尝试过使用数据类型 int、numeric,并将更新语句也转换为 int。

标签: sqlssissql-updateglobal-temp-tables

解决方案


您在这里有两个可能的问题之一。

1)您有一个明确的CREATE TABLE #StatementAccounts声明,您在其中定义IssuesNVARCHAR没有指定长度,在这种情况下,它是一个字符,或者长度太小而无法容纳您试图在UPDATE声明中附加的其他字符。

修复:使声明至少len( ' - Do Not Use Account')字符更长。

2) 从事物的声音来看,更有可能的是,您正在使用SELECT...INTO #StatementAccounts语句并让 SQL Server 为您定义数据类型。在这种情况下,它的设置Issues刚好足以容纳该初始语句中的最大值。

修复:发出显式CREATE TABLE #StatementAccounts语句并声明适当大小的数据类型,然后SELECT...INTOINSERT INTO.


推荐阅读