数据类型转换导致SSIS包中的错误

时间:2019-07-17 18:00:33

标签: sql ssis sql-update global-temp-tables

我有一个SSIS软件包,该软件包具有使用Execute SQL Task创建临时表的步骤。

在此查询中,我有一个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

我在另一个Execute SQL Task中有一条更新语句,如下所示:

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

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

我使用的数据类型错误吗?

是否还需要强制转换/转换Update语句?

任何指导都会有所帮助。

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

1 个答案:

答案 0 :(得分:1)

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

1)您有一条明确的CREATE TABLE #StatementAccounts语句,其中您将Issues定义为NVARCHAR,但未指定长度,在这种情况下,该字符是一个字符,或者长度太小来容纳您尝试在UPDATE语句后附加的其他字符。

FIX:使声明至少长len( ' - Do Not Use Account')个字符。

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

FIX:发出明确的CREATE TABLE #StatementAccounts语句并声明适当大小的数据类型,然后将SELECT...INTO更改为INSERT INTO

相关问题