我有一个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。
答案 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
。