我有一个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 和 Cast update 语句作为 int。
您在这里遇到以下两个可能的问题之一。
1( 您有一个显式CREATE TABLE #StatementAccounts
语句,您将Issues
定义为未指定长度的NVARCHAR
,在这种情况下,它是一个字符,或者长度太小,无法容纳您尝试附加到UPDATE
语句中的其他字符。
修复: 使声明至少长 len( ' - Do Not Use Account')
个字符。
2(从声音上看,更有可能的是,您正在使用SELECT...INTO #StatementAccounts
语句并让SQL Server为您定义数据类型。在这种情况下,它将Issues
设置为足够大,以容纳该初始语句中的最大值。
修复: 发出显式 CREATE TABLE #StatementAccounts
语句并声明适当大小的数据类型,然后将SELECT...INTO
更改为 INSERT INTO
。