Какой столбец вызвал ошибку вставки

Ошибка

Ошибка преобразования при преобразовании значения 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", столбец не допускает пустых значений. ВСТАВИТЬ не удается

в то время как другие относительно бесполезны.

Как я могу повысить полезность сообщения об ошибке, с которым я не могу действовать напрямую, например, в первом предложении выше?


person DingoCC    schedule 22.12.2017    source источник
comment
Проблема в том, что первая ошибка может быть сгенерирована в большом числе случаев, и во многих из них может даже не быть имя, которое можно применить к месту назначения для данные. т.е. это может произойти при вычислении подвыражений большего выражения.   -  person Damien_The_Unbeliever    schedule 22.12.2017
comment
Единственный способ, которым вы можете дать полезные сообщения, - это проанализировать данные и проверить их достоверность самостоятельно. Это, однако, может потребовать некоторой работы, но тогда вы сможете давать точные сообщения. В противном случае вы зависите от системных сообщений.   -  person Allan S. Hansen    schedule 22.12.2017


Ответы (1)


Для ColumnA DataType — это Varchar (50), вам нужно украсить значение одинарными кавычками, а ColumnC Datatype — Int, вы не можете вставить «B», это должно быть целочисленное значение.

Указанный вами порядок значений должен совпадать с порядком столбца, указанным во вставке в пункт, вы можете исправить свой запрос двумя способами.

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

OR

           INSERT INTO [dbo].[Table_1]
           ([ColumnB]
           ,ColumnC,
            [columnA])
     VALUES
           (23,
           56,
           'b')
person Sahi    schedule 22.12.2017
comment
Да Сахи, мой пример надуманный. Я не помогаю с моим кодом выше. - person DingoCC; 08.01.2018