解决提供的行不准确时的“字符串或二进制数据将被截断”错误

问题描述 投票:0回答:1

我正在使用 SQL Server Management Studio 运行 SQL Server 2017。

我可以提供的有关我的错误的详细信息如下:

无法将数据加载到数据库,因为:字符串或二进制数据将被截断。 :程序~~:第#行

“程序~~”大约是。 5000行代码,由大量向各个表插入数据的语句组成。

指定的行 # 位于众多插入语句之一内,但由于我迄今为止所做的检查,这并不是错误的实际原因。

由于指定的行号位于许多插入语句之一内,因此我的第一个目标是检查该行。

  • 该行中的信息是从存储在
    varChar(2)
  • 的表中选择的
  • 信息将被插入到表中,并将其存储为
    varChar(3)
  • 在最初导致错误的特定情况以及我正在测试的情况下,该值将是 2 个字符长

我的第一次尝试修复是尝试使用

LEFT( , )
函数截断信息,以防我没有看到的值发生某种变化。我尝试了
LEFT( , 3)
LEFT( , 2)
,但都没有消除错误。

我检查的第二件事是,如果错误消息中的行号偏离了一两行,我会仔细检查此插入语句处理的其他信息位。该信息的整体长度对于要插入的表来说是正确的,并且也已经被

LEFT( , )
函数修改,以防它自然不具有正确的长度。

我目前正在尝试删除过程中的各种插入语句~~。在多种情况下,该过程可能会插入到与第 # 行事件期间相同的表中。

我首先完成了整个过程,将这些类似的插入语句一一删除,并尝试再次运行代码。错误继续出现。

然后我完成了该过程并尝试批量删除过程~~中存在的其他插入语句。例如,删除“Insert into Foobar”的所有实例并进行测试,然后删除“Insert into Boofar”的所有实例并进行测试。

虽然我还没有遍历每个可能的表,因为处理请求需要一些时间,但我越来越不确定这种方法是否能最好地利用我的时间。到目前为止,我尝试删除的插入语句尚未导致错误被删除。

  • 如果我当前的过程没有发现错误,接下来我应该尝试什么?
  • 除了我尝试插入的值对于我尝试插入的位置来说太长之外,是否还有其他原因可能会出现“字符串或二进制数据将被截断”错误?
  • 如何解决这个问题?
sql-server string ssms truncate sql-truncate
1个回答
0
投票

回复:“我目前正在尝试删除过程 ~~ 中的各种插入语句。在多种情况下,该过程可能会插入到与第 # 行事件期间相同的表中。”

因为您可以修改 SP 中的代码并重新运行它。尝试在 SP 主体中一一运行语句,即将 SP 主体复制粘贴到 SSMS 中的新查询窗口中,同时将所有参数声明为变量并将它们初始化为正确的值。

回复:“在我之前使用打印语句” - 前提是您有唯一的打印语句,例如“执行插入语句 X”并且您有很多这样的语句,为什么不从查询窗口手动运行 SP 并查看错误之前显示的最后一个打印语句文本是什么。这应该可以帮助您缩小行号范围。

© www.soinside.com 2019 - 2024. All rights reserved.