【问题标题】:Which column caused the insertion error哪一列导致插入错误
【发布时间】:2017-12-22 00:52:59
【问题描述】:

错误是

将 varchar 值 'b' 转换为数据类型 int 时转换失败。

表结构:

CREATE TABLE [dbo].[Table_1]
(
    [columnA] varchar(50) NULL,
    [ColumnB] int NOT NULL,
    ColumnC int null
) ON [PRIMARY]
GO

INSERT INTO [dbo].[Table_1] ([columnA], [ColumnB], ColumnC)
VALUES (23, 56, 'b')

我的 ETL 管道记录所有错误。有些是有用的,比如

无法将值 NULL 插入列“ColumnB”、表“DWDev.dbo.Table_1”,列不允许空值。插入失败'

而其他的相对没用。

如何提高我无法直接操作的错误消息的有用性,例如上面第一句中的错误消息?

【问题讨论】:

  • 问题是,第一个错误可能会在 大量 的情况下产生,而且在很多情况下,甚至可能be应用于数据“目标”的名称。 IE。在评估较大表达式的子表达式时可能会发生这种情况。
  • 您可以提供“有用”消息的唯一方法是解析数据并自己测试其有效性。然而,这可能需要相当多的工作,但您可以提供准确的信息。否则,您将依赖系统消息。

标签: sql-server tsql sql-server-2017


【解决方案1】:

对于ColumnA的DataType是Varchar(50),需要用单引号来修饰值而ColumnC的Datatype是Int,不能插入'B',应该是整数值。

您提供的值顺序应与插入子句中指定的列顺序相同 您可以通过 2 种方式更正您的查询

           INSERT INTO [dbo].[Table_1]
           ([columnA]
           ,[ColumnB]
           ,ColumnC)
     VALUES
           ('23',
           56,
           1)

           INSERT INTO [dbo].[Table_1]
           ([ColumnB]
           ,ColumnC,
            [columnA])
     VALUES
           (23,
           56,
           'b')

【讨论】:

  • 是的,Sahi,我的例子是做作的。我对上面的代码没有具体帮助。
猜你喜欢
  • 2022-11-29
  • 1970-01-01
  • 2015-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
相关资源
最近更新 更多