Какой будет формат BCP для вставки идентификационной колонки? - PullRequest
7 голосов
/ 05 июля 2010

Я столкнулся с проблемой при попытке вставить данные в таблицу с помощью BCP.В таблице есть столбец идентификаторов.Я беру ввод из текстового файла.Пожалуйста, дайте мне знать, если есть какие-либо хорошие решения.

С уважением, Чаян

Ответы [ 3 ]

10 голосов
/ 27 октября 2011

Мне нужно было сделать то же самое, и мой коллега указал, что для этого можно использовать переключатель -E на BCP.

Из документов ...

"- E Указывает, что значение идентификатора или значения в импортированном файле данных должны использоваться для столбца идентификаторов. Если -E не указано, значения идентификаторов для этого столбца в импортируемом файле данных игнорируются."

Работает угощение, спасибо Ян!

7 голосов
/ 05 июля 2010

На самом деле у вас есть два варианта:

  • делать не вставить значение для столбца IDENTITY и позволить SQL Server обработать его для вас

  • если вы не можете или не хотите этого делать, вам нужно включить IDENTITY_INSERT для этой таблицы, затем вставить значение и снова отключить его:

    SET IDENTITY_INSERT (table name) ON
    -- do your bcp import here
    SET IDENTITY_INSERT (table name) OFF
    

    С этим параметром вам разрешено вставлять свои собственные значения в столбец IDENTITY.

    Если вы сделаете это, вам также может понадобиться повторно заполнить столбец идентификации после вставки, чтобы избежать возможных дубликатов в вашей IDENTITY:

    DBCC CHECKIDENT('table name', RESEED)
    
4 голосов
/ 24 января 2014

Создание представления без столбца идентификаторов также полезно, файл формата не требуется:

bcp mydb.dbo.myview in file.txt -S(local) -T -e err.log -c
...