Массовая вставка SSMS = Ошибка + Что это за строка? - PullRequest
0 голосов
/ 14 ноября 2018

Я пытаюсь вставить много данных с помощью SQL Server Management Studio .Вот что я делаю:

  1. Я открываю свой файл, содержащий множество вставок SQL: data.sql
  2. Я выполняю его (F5)
  3. Я получаю много таких:

    (1 row(s) affected)
    

    и некоторые из них:

    Msg 8152, Level 16, State 13, Line 26
    String or binary data would be truncated.
    The statement has been terminated.
    

Вопрос: Как получитьномер строки ошибки?Строка 26, кажется, не является правильным номером строки ошибки ...

1 Ответ

0 голосов
/ 14 ноября 2018

Это то, что раздражало разработчиков SQL Server в течение многих лет. Наконец, с SQL Server 2017 CU12 с флагом трассировки 460 они дают вам лучшее сообщение об ошибке, например:

Сообщение 2628, уровень 16, состояние 6, имя процедуры процедуры, номер строки строки Строка или двоичные данные будут усечены в таблице "%. * Ls", столбец "%. * Ls. Усеченное значение: ‘%. * Ls

Способ обойти это сейчас заключается в добавлении оператора print после каждой вставки. Затем, когда вы видите распечатку rows affected, вы можете увидеть, что вы печатаете.

...
insert into table1
select...

print 'table1 insert complete'

insert into table2
select...

print 'table2 insert complete'

Это не скажет вам, какой столбец, но сузит его до правильной вставки. Вы также можете добавить SET NOCOUNT ON вверху вашего скрипта, если вы не хотите, чтобы сообщение о поврежденных строках было распечатано.

Еще одно дополнение, если вы действительно используете BULK INSERT и не просто используете термин в целом, вы можете указать ERRORFILE. Это запишет строки, которые вызвали ошибку в вашей команде BULK INSERT. Важно знать, что по умолчанию BULK INSERT завершится, если будет 10 ошибок или меньше. Вы можете переопределить это, указав MAXERRORS в вашей команде BULK INSERT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...