sql - 数据类型转换导致 SSIS 包中的错误
问题描述
我有一个 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,并将更新语句也转换为 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
.
推荐阅读
- java - 为一个活动中的多个列表定义 onItemClick 行为的正确方法?
- java - onAppWidgetOptionsChanged() 在屏幕唤醒时调用。如何防止这种情况?
- java - 使用扫描仪在java中读取多行
- android - 如何从 listView Activity 导航到特定的选项卡式 Fragment Activity
- javascript - 如何使用 Node.js 连接到远程 mysql 数据库
- javascript - 如何在另一个具有 onload 函数的函数之后执行一个函数?
- sql - Sql 异常 - 尝试附加数据库文件,但使用了错误的路径?
- react-admin - 在调度 crudCreate 操作后利用 HTTP 响应中的 id
- sql - 使用 SQL 从一个 #Temp 表中的两个表中获取显示数据
- angularjs - 在 Tomcat 8 上从 AngularJS 上传到 Spring MVC 的文件会出现此错误:所需的请求部分“文件”不存在