【问题标题】:select row with error during insert在插入期间选择错误的行
【发布时间】:2013-04-05 03:57:10
【问题描述】:

在 SQL Server 中,当我尝试使用直接选择语句从表中插入时,出现错误

Conversion failed when converting the nvarchar value 'CLONED' to data type int.

有什么方法可以查看引发此错误的特定行吗?

insert into manual_defect SELECT <long list of columns> from xyztable

【问题讨论】:

    标签: sql sql-server select insert


    【解决方案1】:

    您可以使用尝试捕获并丢弃行号,但我发现快速调试的最佳方法是选择前 1000 个,然后选择 100 个并继续这样做,直到找到导致问题的行。只是一个建议

    【讨论】:

    • 我该怎么做.. 对于 DELETE,删除前 1000 个,然后是下一个 1000 等等会很容易.. 但是对于选择,最好的方法是什么
    • 否则,如果我能够忽略错误列并继续插入,它符合我的目的
    【解决方案2】:

    您从 xyztable 中选择的列之一是 nvarchar 类型,而 manual_defect 中的匹配列是 int。您需要在 xyztable 中找到该列中包含不会转换为 int 的内容的行。

    SELECT * FROM xyztable WHERE NOT ISNUMERIC(yournvarcharcolumn + '.0e0')
    

    IsNumeric 检查一个值(在这种情况下将是一个字符串)是否可以转换为数字类型。通过在检查之前附加“.0e0”,我们确保只有整数可以工作,因为当您将其添加到末尾时,任何其他字符串格式的数字类型都不再是有效的数字类型。

    如果您真的只想找到引发您引用的错误的单行,那么这会更快:

    SELECT * FROM xyztable WHERE yournvarcharcolumn = 'CLONED'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多