sql-server - 如何避免 SQL 作业中出现 "Warning: String or Binary data would be truncated"导致失败

标签 sql-server sql-server-2005 stored-procedures

我已经看过这个,但我见过和尝试过的解决方案都没有真正解决我的问题。

背景:使用SQL Server 2005

当我运行存储过程将数据插入表中时,它工作正常。如果我得到一个 SQL 作业来对相同的数据运行相同的存储过程,该作业会成功运行,但数据不会插入到相同的目标表中。

我已尝试SET ansi_warnings OFF,但编译 SQL 时出现错误,提示

Heterogeneous queries require the ANSI_NULLS and ANSI_WARNINGS options to be set for the connection. This ensures consistent query semantics. Enable these options and then reissue your query.

表架构:

[JobNo] [int] 
[ProductCode] [varchar](20) 
[ProductName] [varchar](200)
[ReportedAvailability] [varchar](100) 
[ReportedProductClean] [varchar](100)
[ReportedProductDate] [varchar](100) 
[ReportedProductPrice] [int] 
[ReportedCasesOrdered] [int] 
[AvailableYes] [int] 
[AvailableOOS] [int] 
[AvailableNotRanged] 
[ProductClean] [int] 
[ProductInDate] [int]
[ProductPrice] [int] 
[CasesOrdered] [int] 
[Include] [int] 
[Counter] [int] 
[UserId] [varchar](10) 
[Modified] [datetime] 

在游标中,插入语句周围有一个 try/catch,因此当它一个接一个地处理作业时,如果出现问题,我可以确切地知道它在哪个作业上失败,因为有一个更新语句如果可以就说“完成”,如果不行就说“失败”。

我放入此表中的所有数据都足够短,足以适合所需的列(即产品名称少于 200 个字符,INT 值不超过 5 位)。

我收到警告,而不是错误,但我不明白为什么它在作为 SQL 作业运行时会失败合法记录,但在作为独立 SP 运行时却不会。

目标表上没有触发器,INT 列上有一些默认为 0 的约束(但我没想到这会是问题。同一 SP 中的其他表没有此问题)

提前致谢

最佳答案

运行作业或直接存储过程时不应出现任何错误,除非作业中存在导致某些数据比预期长的逻辑。我使用了很多作业和存储过程,但从未遇到过这样的错误。从开发人员的角度来看,作业中的错误仅在以下情况下发生:1) 执行帐户出现故障或缺乏访问权限,2) 执行存储过程确实存在错误

关于sql-server - 如何避免 SQL 作业中出现 "Warning: String or Binary data would be truncated"导致失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18900207/

相关文章:

sql - 在 SQL Server 中使用标识列为 INSERT 语句指定 "NEXT VALUE"

php - MySQL存储过程或函数以特定格式返回人名

sql - 在 SQL Server 中从日期时间添加或减去时间

entity-framework - Entity Framework 中的存储过程

sql-server - 在同时运行的 Tomcat 服务器中的多个 war 文件之间共享 sqljdbc_auth.dll

sql - 是否有任何技巧允许将 Management Studio(2008 版)的 IntelliSense 功能与早期版本的 SQL Server 一起使用?

c# - 如何构造指定精度和小数位数的 SqlDecimal 数据类型的实例

sql-server-2005 - 在 SQL Server 表之间高效地移动大量数据?

sql-server-2005 - 通过 SSIS 上传之前验证数据

SQL 约束检查还是触发器?