数据类型转换导致 SSIS 包出错
Data Type Conversion causing error in SSIS Package
我有一个 SSIS 程序包,其中包含一个使用执行 SQL 任务创建临时 table 的步骤。
在此查询中,我有一个案例语句,类似于:
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
执行包时我收到错误消息:"Error: String or binary data would be truncated."
我使用了错误的数据类型吗?
Update 语句是否也需要 cast/converted?
任何指导都会有所帮助。
我尝试过使用数据类型 int、numeric,并将更新语句也转换为 int。
您遇到了两个可能的问题之一。
1) 你有一个显式的 CREATE TABLE #StatementAccounts
语句,你将 Issues
定义为 NVARCHAR
没有指定长度,在这种情况下它是一个字符,或者长度是太小,无法容纳您尝试在 UPDATE
语句中附加的其他字符。
修复:使声明至少长 len( ' - Do Not Use Account')
个字符。
2) 从事物的声音来看,您更有可能使用 SELECT...INTO #StatementAccounts
语句并让 SQL 服务器为您定义数据类型。在这种情况下,它将 Issues
设置为刚好足以容纳该初始语句中的最大值。
FIX:发出明确的 CREATE TABLE #StatementAccounts
语句并声明适当大小的数据类型,然后将 SELECT...INTO
更改为 INSERT INTO
。
我有一个 SSIS 程序包,其中包含一个使用执行 SQL 任务创建临时 table 的步骤。
在此查询中,我有一个案例语句,类似于:
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
执行包时我收到错误消息:"Error: String or binary data would be truncated."
我使用了错误的数据类型吗?
Update 语句是否也需要 cast/converted?
任何指导都会有所帮助。
我尝试过使用数据类型 int、numeric,并将更新语句也转换为 int。
您遇到了两个可能的问题之一。
1) 你有一个显式的 CREATE TABLE #StatementAccounts
语句,你将 Issues
定义为 NVARCHAR
没有指定长度,在这种情况下它是一个字符,或者长度是太小,无法容纳您尝试在 UPDATE
语句中附加的其他字符。
修复:使声明至少长 len( ' - Do Not Use Account')
个字符。
2) 从事物的声音来看,您更有可能使用 SELECT...INTO #StatementAccounts
语句并让 SQL 服务器为您定义数据类型。在这种情况下,它将 Issues
设置为刚好足以容纳该初始语句中的最大值。
FIX:发出明确的 CREATE TABLE #StatementAccounts
语句并声明适当大小的数据类型,然后将 SELECT...INTO
更改为 INSERT INTO
。