Сохранение значений идентификаторов при массовом импорте данных (SQL Server)

Для файлов данных, содержащих значения идентификаторов, можно выполнить массовый импорт в экземпляр Microsoft SQL Server. По умолчанию значения столбца идентификаторов в импортируемом файле данных не учитываются, и SQL Server автоматически присваивает им уникальные значения на основе начального значения и значения приращения, указанных при создании таблицы.

Если файл данных не содержит значений для столбцов идентификаторов в таблице, то для указания того, что при импорте столбец идентификаторов в таблице нужно пропустить, применяется файл форматирования. SQL Server присваивает столбцу уникальные значения автоматически.

Чтобы SQL Server не присваивал значения идентификаторов при массовом импорте строк в таблицу, используется соответствующий квалификатор команды для сохранения значений идентификаторов. При указании квалификатора сохранения значений идентификаторов SQL Server пользуется значениями идентификаторов, имеющимися в файле данных. Ниже приведены эти квалификаторы.

Get-Help Квалификатор сохранения значений идентификаторов Тип квалификатора
bcp -E Параметр
BULK INSERT KEEPIDENTITY Аргумент
Инструкции INSERT ... SELECT * FROM OPENROWSET(BULK...). KEEPIDENTITY Табличное указание

Дополнительные сведения см. в разделах служебная программа bcp, BULK INSERT (Transact-SQL),OPENROWSET (Transact-SQL),INSERT (Transact-SQL),SELECT (Transact-SQL) и Табличные указания (Transact-SQL).

Примечание

Сведения о том, как создать автоматически увеличивающееся числовое значение, которое может использоваться в нескольких таблицах или вызываться из приложений без ссылки на какие-либо таблицы, см. в разделе Порядковые номера.

Примеры

Примеры в этом разделе массовый импорт данных с помощью инструкции INSERT ... SELECT * FROM OPENROWSET(BULK...) и сохранение значений по умолчанию.

Образец таблицы

Примеры массового импорта требуют, чтобы в образце базы данных AdventureWorks в схеме dbo была создана таблица с именем myTestKeepNulls. Для создания такой таблицы: в SQL Server Management Studio Редактор запросов выполните следующую команду:

USE AdventureWorks;  
GO  
SELECT * INTO HumanResources.myDepartment   
   FROM HumanResources.Department  
      WHERE 1=0;  
GO  
SELECT * FROM HumanResources.myDepartment;  

В таблице Department, на которой основана таблица myDepartment, IDENTITY_INSERT имеет значение OFF. Поэтому для импорта данных в столбец идентификаторов необходимо указать KEEPIDENTITY или -E.

Образец файла данных

Файл данных, который используется в примерах массового импорта, содержит данные, экспортированные из таблицы HumanResources.Department в собственном формате. Чтобы создать файл данных, в командной строке Microsoft Windows введите:

bcp AdventureWorks.HumanResources.Department out myDepartment-n.Dat -n -T  

Образец файла форматирования

В этих примерах массового импорта применяется XML-файл форматирования myDepartment-f-x-n.Xml, использующий собственные форматы данных. В этом примере bcp используется для создания данного файла форматирования из таблицы HumanResources.Department базы данных AdventureWorks. В командной строке Windows введите:

bcp AdventureWorks.HumanResources.Department format nul -n -x -f myDepartment-f-n-x.Xml -T  

Дополнительные сведения о создании файла форматирования см. в статье Создание файла форматирования (SQL Server).

A. Использование команды bcp с сохранением значений идентификаторов

В следующем примере показан способ сохранения значений идентификаторов при использовании команды bcp для массового импорта данных. Команда bcp использует файл форматирования myDepartment-f-n-x.Xml и содержит следующие параметры:

Квалификаторы Описание
-E Указывает, что в столбец идентификаторов загружаются значения идентификаторов, находящиеся в файле данных.
-T Указывает, что служебная bcp программа подключается к SQL Server с помощью доверенного подключения.

В командной строке Windows введите:

bcp AdventureWorks.HumanResources.myDepartment in C:\myDepartment-n.Dat -f C:\myDepartment-f-n-x.Xml -E -T  
  

Б. Использование BULK INSERT с сохранением значений идентификаторов

В следующем примере BULK INSERT используется для массового импорта данных из файла myDepartment-c.Dat в таблицу AdventureWorks.HumanResources.myDepartment . Инструкция использует файл форматирования myDepartment-f-n-x.Xml и включает параметр KEEPIDENTITY для сохранения значений идентификаторов, находящихся в файле данных.

В SQL Server Management Studio Редактор запросов выполните следующую команду:

USE AdventureWorks;  
GO  
DELETE HumanResources.myDepartment;  
GO  
BULK INSERT HumanResources.myDepartment  
   FROM 'C:\myDepartment-n.Dat'  
   WITH (  
      KEEPIDENTITY,  
      FORMATFILE='C:\myDepartment-f-n-x.Xml'  
   );  
GO  
SELECT * FROM HumanResources.myDepartment;  
  

В. Использование OPENROWSET с сохранением значений идентификаторов

В следующем примере поставщик наборов строк OPENROWSET используется для массового импорта данных из файла myDepartment-c.Dat в таблицу AdventureWorks.HumanResources.myDepartment . Инструкция использует файл форматирования myDepartment-f-n-x.Xml и включает указание KEEPIDENTITY для сохранения всех значений идентификаторов, содержащихся в файле данных.

В SQL Server Management Studio Редактор запросов выполните следующую команду:

USE AdventureWorks;  
GO  
DELETE HumanResources.myDepartment;  
GO  
  
INSERT INTO HumanResources.myDepartment  
   with (KEEPIDENTITY)  
   (DepartmentID, Name, GroupName, ModifiedDate)  
   SELECT *  
      FROM  OPENROWSET(BULK 'C:\myDepartment-n.Dat',  
      FORMATFILE='C:\myDepartment-f-n-x.Xml') as t1;  
GO  
  

Связанные задачи

Использование файла форматирования

Использование форматов данных для массового импорта или экспорта

Задание форматов данных для совместимости с помощью программы bcp

  1. Определение признаков конца поля и строки (SQL Server)

  2. Определение длины префикса в файлах данных с помощью программы bcp (SQL Server)

  3. Указание типа файлового хранилища с помощью программы bcp (SQL Server)

См. также:

BACKUP (Transact-SQL)
Программа bcp
BULK INSERT (Transact-SQL)
OPENROWSET (Transact-SQL)
Табличные указания (Transact-SQL)