【问题标题】:Data Type Conversion causing error in SSIS Package数据类型转换导致 SSIS 包中的错误
【发布时间】:2019-11-26 15:17:51
【问题描述】:

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

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

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

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

任何指导都会有所帮助。

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

【问题讨论】:

  • #StatementAccounts.Issues的数据类型是什么?
  • 你好,数据类型转换为nvarchar。
  • 你在 nvarchar 上没有长度,比如 nvarchar(100)
  • 修复回到创建临时表并延长问题的长度

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


【解决方案1】:

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

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

【讨论】:

  • 成功了!您的假设是正确的,我在“问题”中没有定义 Nvarchar 的长度。谢谢!
猜你喜欢
  • 1970-01-01
  • 2014-07-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多