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

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

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

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

Команда

Квалификатор сохранения значений идентификаторов

Тип квалификатора

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...) с сохранением значений по умолчанию.

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

Для примеров массового импорта в образце базы данных AdventureWorks2008R2 в схеме dbo необходимо наличие таблицы с именем myTestKeepNulls. Для создания этой таблицы в редакторе запросов среды Среда SQL Server Management Studio выполните:

USE AdventureWorks2008R2;
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 AdventureWorks2008R2.HumanResources.Department out myDepartment-n.Dat -n -T

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

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

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

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

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

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

Квалификаторы

Описание

-E

Указывает, что в столбец идентификаторов загружаются значения идентификаторов, находящиеся в файле данных.

-T

Указывает, что программа bcp устанавливает доверительное соединение с SQL Server.

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

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

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

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

В редакторе запросов среды Среда SQL Server Management Studio выполните:

USE AdventureWorks2008R2;
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 в таблицу AdventureWorks2008R2.HumanResources.myDepartment. Инструкция использует файл форматирования myDepartment-f-n-x.Xml и включает подсказку KEEPIDENTITY для сохранения всех значений идентификаторов, содержащихся в файле данных.

В редакторе запросов среды Среда SQL Server Management Studio выполните:

USE AdventureWorks2008R2;
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