昨天的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,所以我假设必须以某种方式连接。但是,除了特定时间和用户特定外,它似乎也受到我改变程序的影响。
答案 0 :(得分:0)
1)在代码中,您声明表@TempTable并插入@Temp
2)A.Value在某些情况下比25chars更长。尝试使用LEFT(A.Value,25)代替。或者扩展列大小。