无法重现“字符串或二进制数据会被截断”错误

时间:2017-09-27 09:33:51

标签: sql sql-server

昨天的10分钟时间内,SQL存储过程在通过我的网络服务器执行时,不断抛出错误“字符串或二进制数据将被截断”。但是,当我通过Microsost SQL Server Management Studio运行完全相同的SQL命令时,没有错误。

在SP中只有一个插入语句;这是它的抽象:

DECLARE @TempTable table (Row1 varchar(25), Row2 varchar(4), Row3 int)
INSERT INTO @TempTable (Row1,Row2,Row3)
SELECT DISTINCT
  A.Value
  ,RIGHT(A.Text,4)
  ,CAST(ISNULL(A.Thing,'0') as int)
FROM ActivityTable A

在数据库活动表中,每个行都定义为varchar(25),尽管Thing总是用于整数(存储为varchar,是的,它是愚蠢的)。从表面上看,我看不出其中任何一个可能超过插入列的大小。

我尝试逐个评论它们,而是插入一个空字符串。首先,我用''替换A.Value并刷新执行该程序的网页;没有错误。我假设这是问题列,所以我把它恢复到原始值,假设这会带回错误。除非它没有,从那以后错误没有再发生。

这个SP几个月没有出现任何问题,昨天只破了10分钟。上周我将SQL服务器上的兼容级别从100提高到130,所以我假设必须以某种方式连接。但是,除了特定时间和用户特定外,它似乎也受到我改变程序的影响。

1 个答案:

答案 0 :(得分:0)

1)在代码中,您声明表@TempTable并插入@Temp

2)A.Value在某些情况下比25chars更长。尝试使用LEFT(A.Value,25)代替。或者扩展列大小。