我正在使用 SQL Server Management Studio 运行 SQL Server 2017。
我可以提供的有关我的错误的详细信息如下:
无法将数据加载到数据库,因为:字符串或二进制数据将被截断。 :程序~~:第#行
“程序~~”大约是。 5000行代码,由大量向各个表插入数据的语句组成。
指定的行 # 位于众多插入语句之一内,但由于我迄今为止所做的检查,这并不是错误的实际原因。
由于指定的行号位于许多插入语句之一内,因此我的第一个目标是检查该行。
varChar(2)
varChar(3)
我的第一次尝试修复是尝试使用
LEFT( , )
函数截断信息,以防我没有看到的值发生某种变化。我尝试了LEFT( , 3)
和LEFT( , 2)
,但都没有消除错误。
我检查的第二件事是,如果错误消息中的行号偏离了一两行,我会仔细检查此插入语句处理的其他信息位。该信息的整体长度对于要插入的表来说是正确的,并且也已经被
LEFT( , )
函数修改,以防它自然不具有正确的长度。
我目前正在尝试删除过程中的各种插入语句~~。在多种情况下,该过程可能会插入到与第 # 行事件期间相同的表中。
我首先完成了整个过程,将这些类似的插入语句一一删除,并尝试再次运行代码。错误继续出现。
然后我完成了该过程并尝试批量删除过程~~中存在的其他插入语句。例如,删除“Insert into Foobar”的所有实例并进行测试,然后删除“Insert into Boofar”的所有实例并进行测试。
虽然我还没有遍历每个可能的表,因为处理请求需要一些时间,但我越来越不确定这种方法是否能最好地利用我的时间。到目前为止,我尝试删除的插入语句尚未导致错误被删除。
回复:“我目前正在尝试删除过程 ~~ 中的各种插入语句。在多种情况下,该过程可能会插入到与第 # 行事件期间相同的表中。”
因为您可以修改 SP 中的代码并重新运行它。尝试在 SP 主体中一一运行语句,即将 SP 主体复制粘贴到 SSMS 中的新查询窗口中,同时将所有参数声明为变量并将它们初始化为正确的值。
回复:“在我之前使用打印语句” - 前提是您有唯一的打印语句,例如“执行插入语句 X”并且您有很多这样的语句,为什么不从查询窗口手动运行 SP 并查看错误之前显示的最后一个打印语句文本是什么。这应该可以帮助您缩小行号范围。