1

执行产生此错误的存储过程时,它可能会说错误出现在第 42 行附近。但错误离 42 不远。有时它在连接中,有时在函数中,有时在子查询中......但是第 42 行永远不会与错误接近甚至远程相关。

我通常要做的是复制所有存储过程代码,重新创建所有输入并设置默认值,然后开始分解并重新执行它,以查找正在截断的数据位。当错误消失时,我知道我剥离的最后一批代码中的某些东西导致了它,所以我开始分解那批代码。这是一种痛苦,并且需要相当长的时间才能通过如此简单的修复来解决如此简单的错误。

有没有更简单的方法来调试我可能会丢失的这个?

4

1 回答 1

1

您应该在存储过程中添加代码以检查变量的长度,然后再将它们的值插入表中,必要时引发错误。- 见下面的例子。

代码片段

--This batch will fail with the SQL Server error message

 DECLARE @MyTable TABLE (MyID INT IDENTITY(1, 1), MyValue VARCHAR(10))

 DECLARE @MyParameter VARCHAR(100)

--Create a string of 52 chars in length

SET @MyParameter = REPLICATE('Z', 52)

INSERT INTO @MyTable(MyValue)

VALUES (@MyParameter)

--This batch will fail with a custom error message

DECLARE @MyTable TABLE (MyID INT IDENTITY(1, 1), MyValue VARCHAR(10))

DECLARE @MyParameter VARCHAR(100)

--Create a string of 52 chars in length

SET @MyParameter = REPLICATE('Z', 52)

IF LEN(@MyParameter) > 10

BEGIN

RAISERROR('You attempted to insert too many characters into MyTable.MyValue.', 16, 1)

RETURN

END

ELSE

BEGIN

 INSERT INTO @MyTable(MyValue)

 VALUES (@MyParameter)

END

GO
于 2013-06-20T18:01:59.830 回答