【问题标题】:String or binary data would be truncated. The statement has been terminated at System.Data.SqlClient.SqlConnection字符串或二进制数据将被截断。该语句已在 System.Data.SqlClient.SqlConnection 处终止
【发布时间】:2018-05-22 18:43:21
【问题描述】:

示例:表CustomerCustomerName 列是 varchar(100) 并且在存储过程中也是相同的大小。

当我尝试通过传入harry.smith@charterglobal.com 来更新一行时,它会抛出这个错误:

字符串或二进制数据将被截断。该语句已在 System.Data.SqlClient.SqlConnection 处终止

列大小为 100。传递的值小于该值,但我仍然收到此错误 - 为什么?

这里传递电子邮件而不是姓名。

任何帮助表示赞赏

谢谢

【问题讨论】:

  • 我会相信这里的错误信息。
  • 你确定是这个专栏吗?除非您可以提供minimal reproducible example,否则我们基本上只是在猜测或告诉您研究错误...
  • 是的,我通过传递正常字符串验证它有效,当我传递“abcdefgh@qualitydistribution.com”时它失败了
  • 向我们展示存储过程
  • 该表上是否有任何可能的触发器,这可能会将另一个insert 放入其他表中并且错误来自该触发器??

标签: sql-server sql-server-2014


【解决方案1】:

这里没有标准的正确答案,但是如果你运行sql server profiler,你应该能够找到攻击性的sql语句,然后你就可以弄清楚了。

【讨论】:

  • 认为它与触发器更新有关,但它似乎很好,不知道为什么它会在那里中断 -@jyao
【解决方案2】:

这是一个长期存在的案例,SQL Server 十多年来一直有一个可怕的错误消息,而微软只给出了借口。

您将不得不花时间隔离所涉及的表、字段和值,因为 Microsoft 未能在错误消息中提供它们。

【讨论】:

  • 我通过传递正常字符串验证它有效,当我通过“abcdefgh@qualitydistribution.com”时它失败@brian
  • 你的假设领域。检查存储过程并查看该值是否被切碎并放置在可能溢出的其他地方。就像 Firstname varchar(30) 字段将所有内容都保留到第一个空格会截断该值。正如其他人提到的那样,检查触发器等。
  • 是的,这至少可以说是一个长期存在的笑话。当引擎准确地知道哪个列和表时,这是非常明显的。没有在错误消息中报告这只是令人愤怒!!!
  • 想通了,触发器有错误,但代码似乎很好,你能建议吗,上面更新了触发器 - @Brian
猜你喜欢
  • 2012-01-31
  • 1970-01-01
  • 2013-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多