对于10分钟的时间,昨天一个SQL存储过程保持引发错误“字符串或二进制数据将被截断”时,它是通过我的网络服务器执行。但是,当我通过Microsost SQL Server Management Studio运行完全相同的SQL命令时,没有错误。无法重现“字符串或二进制数据将被截断”错误
在SP只有一个INSERT语句;这里是它的一个抽象:
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)虽然事情总是用于整数(存储为varchar,是的,它是愚蠢的)。从表面上看,我看不出任何这些可能超过插入列的大小。
我想评论出来一个接一个,插入一个空字符串代替。首先,我用A.替换A.Value并刷新执行该过程的网页;没有错误。我认为这是问题列,所以我把它放回原始值,假设这会带来错误。除了它没有,并且从那以后错误没有再发生。
该SP已经没有问题,运行了几个月,不仅打破那些10分钟昨天。上周我将SQL服务器上的兼容级别从100提高到了130,所以我假设它必须以某种方式连接。但它似乎也受到我改变程序的影响,除了时间特定和用户特定。
如果ActivityTable中的数据不断变化,过去10分钟无法重现问题是正常的。而不是对行进行注释,您可以从查询中选择所有字段的SELECT MAX(LEN()) – sepupic
“抽象”在这里不太可能有帮助。你需要达到你能*重现你所遇到的实际错误的程度。我可以简单地坐下来编写产生这种错误的代码 - 但它不太可能会与实际的代码相似,因此当我指出如何修复* it *时,它不会很有帮助。 –
如果所有字段的大小为25个字符,真是一个奇怪的问题。你是唯一管理该网络服务器的人吗?也许时间问题与同事改变某事有关,看到它使sp失败,并悄悄地恢复。 –