BULK INSERT (Transact-SQL)BULK INSERT (Transact-SQL)

ОБЛАСТЬ ПРИМЕНЕНИЯ: даSQL Server даБаза данных SQL AzureнетХранилище данных SQL AzureнетParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Выполняет импорт файла данных в таблицу или представление базы данных в формате, указанном пользователем, в SQL ServerSQL Server.Imports a data file into a database table or view in a user-specified format in SQL ServerSQL Server

Значок ссылки на раздел Синтаксические обозначения в Transact-SQLTopic link icon Transact-SQL Syntax Conventions

СинтаксисSyntax

BULK INSERT   
   { database_name.schema_name.table_or_view_name | schema_name.table_or_view_name | table_or_view_name }
      FROM 'data_file'   
     [ WITH   
    (   
   [ [ , ] BATCHSIZE = batch_size ]   
   [ [ , ] CHECK_CONSTRAINTS ]   
   [ [ , ] CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' } ]   
   [ [ , ] DATAFILETYPE =   
      { 'char' | 'native'| 'widechar' | 'widenative' } ]   
   [ [ , ] DATASOURCE = 'data_source_name' ]
   [ [ , ] ERRORFILE = 'file_name' ]
   [ [ , ] ERRORFILE_DATA_SOURCE = 'data_source_name' ]   
   [ [ , ] FIRSTROW = first_row ]   
   [ [ , ] FIRE_TRIGGERS ]   
   [ [ , ] FORMATFILE_DATASOURCE = 'data_source_name' ]
   [ [ , ] KEEPIDENTITY ]   
   [ [ , ] KEEPNULLS ]   
   [ [ , ] KILOBYTES_PER_BATCH = kilobytes_per_batch ]   
   [ [ , ] LASTROW = last_row ]   
   [ [ , ] MAXERRORS = max_errors ]   
   [ [ , ] ORDER ( { column [ ASC | DESC ] } [ ,...n ] ) ]   
   [ [ , ] ROWS_PER_BATCH = rows_per_batch ]   
   [ [ , ] ROWTERMINATOR = 'row_terminator' ]   
   [ [ , ] TABLOCK ]   

   -- input file format options
   [ [ , ] FORMAT = 'CSV' ]
   [ [ , ] FIELDQUOTE = 'quote_characters']
   [ [ , ] FORMATFILE = 'format_file_path' ]   
   [ [ , ] FIELDTERMINATOR = 'field_terminator' ]   
   [ [ , ] ROWTERMINATOR = 'row_terminator' ]   
    )]   

АргументыArguments

database_namedatabase_name
Имя базы данных, в которой находится указанная таблица или представление.Is the database name in which the specified table or view resides. Если не указано, предполагается текущая база данных.If not specified, this is the current database.

schema_nameschema_name
Имя схемы таблицы или представления.Is the name of the table or view schema. Указание аргумента schema_name необязательно, если схемой по умолчанию для пользователя, выполняющего операцию массового импорта, является схема указанной таблицы или представления.schema_name is optional if the default schema for the user performing the bulk-import operation is schema of the specified table or view. Если аргумент schema не указан и схема по умолчанию для пользователя, выполняющего операцию массового импорта, отличается от схемы таблицы или представления, SQL ServerSQL Server возвращает сообщение об ошибке и операция массового импорта не выполняется.If schema is not specified and the default schema of the user performing the bulk-import operation is different from the specified table or view, SQL ServerSQL Server returns an error message, and the bulk-import operation is canceled.

table_nametable_name
Имя таблицы или представления, куда производится массовый импорт данных.Is the name of the table or view to bulk import data into. Могут указываться только те представления, в которых все столбцы относятся к одной и той же базовой таблице.Only views in which all columns refer to the same base table can be used. Дополнительные сведения об ограничениях, накладываемых на загрузку данных в представления, см. в разделе INSERT (Transact-SQL).For more information about the restrictions for loading data into views, see INSERT (Transact-SQL).

' data_file '' data_file '
Полный путь и имя файла данных, который содержит импортируемые в указанную таблицу или представление данные.Is the full path of the data file that contains data to import into the specified table or view. Инструкция BULK INSERT может импортировать данные с диска (сетевого, гибкого, жесткого и т. д.).BULK INSERT can import data from a disk (including network, floppy disk, hard disk, and so on).

Аргумент data_file должен указывать действительный путь с того сервера, на котором запущен SQL ServerSQL Server.data_file must specify a valid path from the server on which SQL ServerSQL Server is running. Если аргумент data_file является удаленным файлом, указывайте имя в формате UNC.If data_file is a remote file, specify the Universal Naming Convention (UNC) name. Имя в формате UNC имеет форму \\Имя_системы\Имя_общего_ресурса\Путь\Имя_файла.A UNC name has the form \\Systemname\ShareName\Path\FileName. Пример:For example:

BULK INSERT Sales.Orders
FROM '\\SystemX\DiskZ\Sales\data\orders.dat';

Применимо к: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.
Начиная с SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP-версии 1.1, аргумент data_file может находиться в хранилище больших двоичных объектов Azure.Beginning with SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP1.1, the data_file can be in Azure blob storage. В этом случае необходимо указать параметр data_source_name.In that case, you need to specify data_source_name option.

Важно!

База данных SQL Azure не поддерживает чтение данных из файлов Windows.Azure SQL Database does not support reading from Windows files.

' data_source_name ' ' data_source_name '
Применимо к: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.
Именованный внешний источник данных, указывающий на расположение импортируемого файла в хранилище больших двоичных объектов Azure.Is a named external data source pointing to the Azure Blob storage location of the file that will be imported. Внешний источник данных должен быть создан с помощью параметра TYPE = BLOB_STORAGE, который доступен в SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP-версии 1.1.The external data source must be created using the TYPE = BLOB_STORAGE option added in SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1. Дополнительные сведения см. в разделе CREATE EXTERNAL DATA SOURCE.For more information, see CREATE EXTERNAL DATA SOURCE.

BULK INSERT Sales.Orders
FROM 'data/orders.dat'
WITH ( DATA_SOURCE = 'MyAzureBlobStorageAccount');

BATCHSIZE = batch_sizeBATCHSIZE =batch_size
Указывает число строк в одном пакете.Specifies the number of rows in a batch. Каждый пакет копируется на сервер за одну транзакцию.Each batch is copied to the server as one transaction. SQL ServerSQL Server фиксирует или откатывает транзакцию для каждого из пакетов.If this fails, SQL ServerSQL Server commits or rolls back the transaction for every batch. По умолчанию, все данные, содержащиеся в файле, передаются одним пакетом.By default, all data in the specified data file is one batch. Дополнительные сведения о вопросах производительности см. в подразделе «Замечания» далее в этом разделе.For information about performance considerations, see "Remarks," later in this topic.

CHECK_CONSTRAINTSCHECK_CONSTRAINTS
Указывает, что при выполнении операции массового импорта будет выполняться проверка всех ограничений целевой таблицы или представления.Specifies that all constraints on the target table or view must be checked during the bulk-import operation. Без параметра CHECK_CONSTRAINTS все ограничения CHECK и FOREIGN KEY пропускаются, и после завершения операции ограничение таблицы помечается как ненадежное.Without the CHECK_CONSTRAINTS option, any CHECK and FOREIGN KEY constraints are ignored, and after the operation, the constraint on the table is marked as not-trusted.

Примечание

Ограничения UNIQUE и PRIMARY KEY проверяются в любом случае.UNIQUE, and PRIMARY KEY constraints are always enforced. При импортировании в символьный столбец, имеющий ограничение NOT NULL, команда BULK INSERT вставляет пустую строку, если в текстовом файле нет значения.When importing into a character column that is defined with a NOT NULL constraint, BULK INSERT inserts a blank string when there is no value in the text file.

Рано или поздно необходимо проверять всю таблицу на соответствие ограничениям.At some point, you must examine the constraints on the whole table. Если таблица перед началом операции массового импорта была не пуста, затраты на повторную проверку ограничений могут превысить затраты на применение ограничений CHECK к добавочным данным.If the table was non-empty before the bulk-import operation, the cost of revalidating the constraint may exceed the cost of applying CHECK constraints to the incremental data.

Отключение проверки ограничений (настройка по умолчанию) может потребоваться в тех ситуациях, когда входные данные содержат строки, нарушающие эти ограничения.A situation in which you might want constraints disabled (the default behavior) is if the input data contains rows that violate constraints. Можно выполнить импорт данных при отключенной проверке ограничений CHECK, а затем при помощи инструкций Transact-SQLTransact-SQL удалить недопустимые данные.With CHECK constraints disabled, you can import the data and then use Transact-SQLTransact-SQL statements to remove the invalid data.

Примечание

Параметр MAXERRORS не влияет на проверку ограничений.The MAXERRORS option does not apply to constraint checking.

CODEPAGE = { ' ACP ' | ' OEM ' | ' RAW ' | ' code_page ' }CODEPAGE = { ' ACP ' | ' OEM ' | ' RAW ' | 'code_page' }
Указывает кодовую страницу данных в файле данных.Specifies the code page of the data in the data file. Аргумент CODEPAGE имеет смысл только в том случае, если данные содержат столбцы типа char, varchar или text с символьными значениями, коды которых больше 127 или меньше 32.CODEPAGE is relevant only if the data contains char, varchar, or text columns with character values greater than 127 or less than 32.

BULK INSERT Sales.Orders
FROM '\\SystemX\DiskZ\Sales\data\orders.dat'
WITH ( CODEPAGE=65001 ); -- UTF-8 encoding

Важно!

Параметр CODEPAGE для SQL Server 2017 (14.x)SQL Server 2017 (14.x) не поддерживается в Linux.CODEPAGE is not a supported option on Linux for SQL Server 2017 (14.x)SQL Server 2017 (14.x). Параметр CODEPAGE для SQL Server 2019SQL Server 2019 допускает только значение RAW.For SQL Server 2019SQL Server 2019, only the 'RAW' option is allowed for CODEPAGE.

Примечание

MicrosoftMicrosoft рекомендует указывать имя параметров сортировки для каждого столбца в файле форматирования.recommends that you specify a collation name for each column in a format file.

Значение аргумента CODEPAGECODEPAGE value ОписаниеDescription
ACPACP Столбцы типа char, varchar или text преобразуются из кодовой страницы ANSIANSI/MicrosoftMicrosoft Windows (ISO 1252) в кодовую страницу SQL ServerSQL Server.Columns of char, varchar, or text data type are converted from the ANSIANSI/MicrosoftMicrosoft Windows code page (ISO 1252) to the SQL ServerSQL Server code page.
OEM (по умолчанию)OEM (default) Столбцы типа char, varchar или text преобразуются из кодовой страницы OEM в кодовую страницу SQL ServerSQL Server.Columns of char, varchar, or text data type are converted from the system OEM code page to the SQL ServerSQL Server code page.
RAWRAW Преобразование кодовой страницы не производится. Это самый быстрый режим.No conversion from one code page to another occurs; this is the fastest option.
code_pagecode_page Номер кодовой страницы, например 850.Specific code page number, for example, 850.

** Важно! ** Версии до SQL Server 2016 (13.x)SQL Server 2016 (13.x) не поддерживают кодовую страницу 65001 (кодировка UTF-8).** Important ** Versions prior to SQL Server 2016 (13.x)SQL Server 2016 (13.x) do not support code page 65001 (UTF-8 encoding).
   

DATAFILETYPE = { 'char' | 'native' | 'widechar' | 'widenative' }DATAFILETYPE = { 'char' | 'native' | 'widechar' | 'widenative' }
Указывает, что инструкция BULK INSERT выполняет импорт из файла определенного типа.Specifies that BULK INSERT performs the import operation using the specified data-file type value.

 

Значение DATAFILETYPEDATAFILETYPE value Представление данныхAll data represented in:
char (по умолчанию)char (default) В символьном формате.Character format.

Дополнительные сведения см. в разделе Использование символьного формата для импорта и экспорта данных (SQL Server).For more information, see Use Character Format to Import or Export Data (SQL Server).
nativenative В собственных типах базы данных.Native (database) data types. Создайте файл данных собственных типов путем массового импорта данных из SQL ServerSQL Server с помощью программы bcp.Create the native data file by bulk importing data from SQL ServerSQL Server using the bcp utility.

Значение собственного типа обеспечивает более высокую производительность по сравнению со значением типа char.The native value offers a higher performance alternative to the char value.

Дополнительные сведения см. в разделе Использование собственного формата для импорта и экспорта данных (SQL Server).For more information, see Use Native Format to Import or Export Data (SQL Server).
widecharwidechar В Юникоде.Unicode characters.

Дополнительные сведения см. в разделе Использование символьного формата Юникод для импорта и экспорта данных (SQL Server).For more information, see Use Unicode Character Format to Import or Export Data (SQL Server).
widenativewidenative В собственных типах базы данных, за исключением столбцов типа char, varchar и text, в которых данные хранятся в Юникоде.Native (database) data types, except in char, varchar, and text columns, in which data is stored as Unicode. Создайте файл данных типа widenative путем массового импорта данных из SQL ServerSQL Server с помощью программы bcp.Create the widenative data file by bulk importing data from SQL ServerSQL Server using the bcp utility.

Значение widenative обеспечивает более высокую производительность по сравнению с widechar.The widenative value offers a higher performance alternative to widechar. Если файл данных содержит расширенные символы ANSIANSI, укажите значение widenative.If the data file contains ANSIANSI extended characters, specify widenative.

Дополнительные сведения см. в разделе Использование собственного формата Юникод для импорта и экспорта данных (SQL Server).For more information, see Use Unicode Native Format to Import or Export Data (SQL Server).
   

ERRORFILE =' file_name 'ERRORFILE ='file_name'
Указывает файл, используемый для сбора строк, которые имеют ошибки форматирования и не могут быть преобразованы в набор строк OLE DB.Specifies the file used to collect rows that have formatting errors and cannot be converted to an OLE DB rowset. Эти строки без изменений копируются из файла данных в файл ошибок.These rows are copied into this error file from the data file "as is."

Файл ошибок создается на стадии выполнения команды.The error file is created when the command is executed. Если он уже существует, возникает ошибка.An error occurs if the file already exists. Дополнительно создается управляющий файл с расширением ERROR.txt.Additionally, a control file that has the extension .ERROR.txt is created. в котором содержатся ссылки на каждую из строк в файле ошибок и диагностические сведения.This references each row in the error file and provides error diagnostics. После исправления ошибок эти данные могут быть повторно загружены.As soon as the errors have been corrected, the data can be loaded.
Применимо к: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1. Начиная с версии SQL Server 2017 (14.x)SQL Server 2017 (14.x), аргумент error_file_pathможет находиться в хранилище больших двоичных объектов Azure.Beginning with SQL Server 2017 (14.x)SQL Server 2017 (14.x), the error_file_path can be in Azure blob storage.

'errorfile_data_source_name''errorfile_data_source_name'
Применимо к: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1. Именованный внешний источник данных, указывающий на расположение файла ошибки в хранилище больших двоичных объектов Azure, в котором будут содержаться ошибки, обнаруженные во время импорта.Is a named external data source pointing to the Azure Blob storage location of the error file that will contain errors found during the import. Внешний источник данных должен быть создан с помощью параметра TYPE = BLOB_STORAGE, который доступен в SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP-версии 1.1.The external data source must be created using the TYPE = BLOB_STORAGE option added in SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1. Дополнительные сведения см. в разделе CREATE EXTERNAL DATA SOURCE.For more information, see CREATE EXTERNAL DATA SOURCE.

FIRSTROW = first_rowFIRSTROW = first_row
Указывает номер первой строки для загрузки.Specifies the number of the first row to load. Значение по умолчанию — первая строка указанного файла данных.The default is the first row in the specified data file. Значения аргумента FIRSTROW начинаются с 1.FIRSTROW is 1-based.

Примечание

Атрибут FIRSTROW не предназначен для пропуска заголовков столбцов.The FIRSTROW attribute is not intended to skip column headers. Пропуск заголовков не поддерживается инструкцией BULK INSERT.Skipping headers is not supported by the BULK INSERT statement. При пропуске строк компонент Компонент SQL Server Database EngineSQL Server Database Engine выполняет поиск только в признаках конца поля и не проверяет данные в полях пропущенных строк.When skipping rows, the Компонент SQL Server Database EngineSQL Server Database Engine looks only at the field terminators, and does not validate the data in the fields of skipped rows.

FIRE_TRIGGERSFIRE_TRIGGERS
Указывает, что при массовом импорте будут выполняться триггеры типа INSERT, определенные для целевой таблицы.Specifies that any insert triggers defined on the destination table execute during the bulk-import operation. Если для операции INSERT определены триггеры в целевой таблице, они будут срабатывать для каждого загруженного пакета.If triggers are defined for INSERT operations on the target table, they are fired for every completed batch.

Если параметр FIRE_TRIGGERS не указан, триггеры Insert не выполняются.If FIRE_TRIGGERS is not specified, no insert triggers execute.

FORMATFILE_DATASOURCE = 'data_source_name'FORMATFILE_DATASOURCE = 'data_source_name'
Применимо к: SQL Server 2017 (14.x)SQL Server 2017 (14.x) 1.1.Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) 1.1.
Именованный внешний источник данных, указывающий на расположение файла форматирования в хранилище больших двоичных объектов Azure, который будет определять схему импортированных данных.Is a named external data source pointing to the Azure Blob storage location of the format file that will define the schema of imported data. Внешний источник данных должен быть создан с помощью параметра TYPE = BLOB_STORAGE, который доступен в SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP-версии 1.1.The external data source must be created using the TYPE = BLOB_STORAGE option added in SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1. Дополнительные сведения см. в разделе CREATE EXTERNAL DATA SOURCE.For more information, see CREATE EXTERNAL DATA SOURCE.

KEEPIDENTITYKEEPIDENTITY
Указывает, что значение или значения идентификаторов в файле импортированных данных будут использоваться для столбца идентификаторов.Specifies that identity value or values in the imported data file are to be used for the identity column. Если параметр KEEPIDENTITY не указан, значения идентификаторов для этого столбца проверяются, но не импортируются, а SQL ServerSQL Server автоматически назначает уникальные значения на основе начального значения и приращения, указанных при создании таблицы.If KEEPIDENTITY is not specified, the identity values for this column are verified but not imported and SQL ServerSQL Server automatically assigns unique values based on the seed and increment values specified during table creation. Если файл данных не содержит значений для столбца идентификаторов, укажите в файле форматирования, что столбец идентификаторов в таблице или представлении при импорте данных следует пропустить. В этом случае SQL ServerSQL Server автоматически назначит уникальные значения для этого столбца.If the data file does not contain values for the identity column in the table or view, use a format file to specify that the identity column in the table or view is to be skipped when importing data; SQL ServerSQL Server automatically assigns unique values for the column. Дополнительные сведения см. в разделе DBCC CHECKIDENT (Transact-SQL).For more information, see DBCC CHECKIDENT (Transact-SQL).

Дополнительные сведения о хранении значений идентификаторов см. в статье Сохранение значений идентификаторов при массовом импорте данных (SQL Server).For more information, see about keeping identify values see Keep Identity Values When Bulk Importing Data (SQL Server).

KEEPNULLSKEEPNULLS
Указывает, что пустым столбцам при массовом импорте должны присваиваться значения NULL, а не значения по умолчанию, назначенные для этих столбцов.Specifies that empty columns should retain a null value during the bulk-import operation, instead of having any default values for the columns inserted. Дополнительные сведения см. в разделе Сохранение значений NULL или использование значений по умолчанию при массовом импорте данных (SQL Server).For more information, see Keep Nulls or Use Default Values During Bulk Import (SQL Server).

KILOBYTES_PER_BATCH = kilobytes_per_batchKILOBYTES_PER_BATCH = kilobytes_per_batch
Определяет приблизительное число килобайт данных в пакете как kilobytes_per_batch.Specifies the approximate number of kilobytes (KB) of data per batch as kilobytes_per_batch. По умолчанию, значение KILOBYTES_PER_BATCH неизвестно.By default, KILOBYTES_PER_BATCH is unknown. Дополнительные сведения о вопросах производительности см. в подразделе «Замечания» далее в этом разделе.For information about performance considerations, see "Remarks," later in this topic.

LASTROW = last_row Указывает номер последней строки для загрузки.LASTROW = last_row Specifies the number of the last row to load. Значение по умолчанию 0, что обозначает последнюю строку в указанном файле данных.The default is 0, which indicates the last row in the specified data file.

MAXERRORS = max_errorsMAXERRORS = max_errors
Указывает максимальное число синтаксических ошибок, допустимых для файла данных, прежде чем операция массового импорта будет отменена.Specifies the maximum number of syntax errors allowed in the data before the bulk-import operation is canceled. Каждая строка, импорт которой при массовом импорте не может быть выполнен, пропускается и считается за одну ошибку.Each row that cannot be imported by the bulk-import operation is ignored and counted as one error. Если аргумент max_errors не указан, значение по умолчанию равно 10.If max_errors is not specified, the default is 10.

Примечание

Параметр MAX_ERRORS не применяет проверки ограничения или преобразование типов данных money и bigint.The MAX_ERRORS option does not apply to constraint checks or to converting money and bigint data types.

ORDER ( { column [ ASC | DESC ] } [ , ... n ] )ORDER ( { column [ ASC | DESC ] } [ ,... n ] )
Указывает, каким образом отсортированы данные в файле.Specifies how the data in the data file is sorted. Производительность массового импорта увеличивается, если импортируемые данные упорядочены согласно кластеризованному индексу таблицы (при наличии).Bulk import performance is improved if the data being imported is sorted according to the clustered index on the table, if any. Если файл данных упорядочен в другом порядке, то есть в порядке отличном от порядка ключа кластеризованного индекса или если в таблице отсутствует кластеризованный индекс, то предложение ORDER не обрабатывается.If the data file is sorted in a different order, that is other than the order of a clustered index key or if there is no clustered index on the table, the ORDER clause is ignored. В целевой таблице должны быть указаны имена столбцов.The column names supplied must be valid column names in the destination table. По умолчанию, операция массовой вставки считает, что файл данных не отсортирован.By default, the bulk insert operation assumes the data file is unordered. Для оптимизированного массового импорта SQL ServerSQL Server , помимо прочего, проверяет сортировку импортируемых данных.For optimized bulk import, SQL ServerSQL Server also validates that the imported data is sorted.

nn
заполнитель, означающий, что может быть указано несколько столбцов.Is a placeholder that indicates that multiple columns can be specified.

ROWS_PER_BATCH = rows_per_batchROWS_PER_BATCH = rows_per_batch
Указывает приблизительное число строк в файле данных.Indicates the approximate number of rows of data in the data file.

По умолчанию все данные в файле отправляются на сервер за одну транзакцию, а число строк в пакете оптимизатору запросов неизвестно.By default, all the data in the data file is sent to the server as a single transaction, and the number of rows in the batch is unknown to the query optimizer. Если указать аргумент ROWS_PER_BATCH (со значением > 0), сервер будет использовать это значение для оптимизации операции массового импорта.If you specify ROWS_PER_BATCH (with a value > 0) the server uses this value to optimize the bulk-import operation. Значение, указанное в ROWS_PER_BATCH, должно приблизительно совпадать с фактическим числом строк.The value specified for ROWS_PER_BATCH should approximately the same as the actual number of rows. Дополнительные сведения о вопросах производительности см. в подразделе «Замечания» далее в этом разделе.For information about performance considerations, see "Remarks," later in this topic.

TABLOCKTABLOCK
Указывает необходимость запроса блокировки уровня таблицы на время выполнения массового импорта.Specifies that a table-level lock is acquired for the duration of the bulk-import operation. Если таблица не имеет индексов и указано ключевое слово TABLOCK, загрузка в таблицу может производиться параллельно несколькими клиентами.A table can be loaded concurrently by multiple clients if the table has no indexes and TABLOCK is specified. По умолчанию работа блокировки определяется параметром таблицы table lock on bulk load.By default, locking behavior is determined by the table option table lock on bulk load. Блокировка на время выполнения массового импорта значительно повышает производительность, позволяя снизить состязание блокировок таблицы.Holding a lock for the duration of the bulk-import operation reduces lock contention on the table, in some cases can significantly improve performance. Дополнительные сведения о вопросах производительности см. в подразделе «Замечания» далее в этом разделе.For information about performance considerations, see "Remarks," later in this topic.

Для индекса columnstoreFor columnstore index. Поведение блокировки будет другим из-за внутреннего разделения на несколько наборов строк.the locking behaviour is different because it is internally divided into multiple rowsets. Каждый поток загружает данные отдельно в каждый набор строк, выполняя X-блокировку в наборе строк, что позволяет загружать данные параллельно с сеансами загрузки данных.Each thread loads data exclusively into each rowset by taking a X lock on the rowset allowing parallel data load with concurrent data load sessions. При использовании параметра TABLOCK поток применит X-блокировку к таблице (в отличие от блокировки BU для традиционных наборов строк), что сделает невозможной одновременную загрузку данных для других параллельных потоков.The use of TABLOCK option will cause thread to take an X lock on the table (unlike BU lock for traditional rowsets) which will prevent other concurrent threads to load data concurrently.

Параметры формата входного файлаInput file format options

FORMAT = 'CSV'FORMAT = 'CSV'
Применимо к: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.
Указывает файл данных с разделителями-запятыми, соответствующий стандарту RFC 4180.Specifies a comma separated values file compliant to the RFC 4180 standard.

BULK INSERT Sales.Orders
FROM '\\SystemX\DiskZ\Sales\data\orders.csv'
WITH ( FORMAT='CSV');

FIELDQUOTE = 'field_quote'FIELDQUOTE = 'field_quote'
Применимо к: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.
Определяет символ, который будет использоваться в качестве символа кавычки в CSV-файле.Specifies a character that will be used as the quote character in the CSV file. Если этот символ не задан, в качестве символа кавычки будет использоваться символ (") согласно стандарту RFC 4180.If not specified, the quote character (") will be used as the quote character as defined in the RFC 4180 standard.

FORMATFILE = 'format_file_path'FORMATFILE = 'format_file_path'
Указывает полный путь к файлу форматирования.Specifies the full path of a format file. Этот файл форматирования содержит описание файла данных — сведения, полученные путем применения программы bcp к той же таблице или представлению.A format file describes the data file that contains stored responses created by using the bcp utility on the same table or view. И предназначен для случаев, когда:The format file should be used if:

  • файл данных содержит больше или меньше столбцов, чем таблица или представление;The data file contains greater or fewer columns than the table or view.

  • столбцы расположены в другом порядке;The columns are in a different order.

  • отличаются разделители столбцов;The column delimiters vary.

  • имеются какие-либо другие изменения в формате данных.There are other changes in the data format. Файлы форматирования обычно создаются с помощью программы bcp и затем при необходимости изменяются в текстовом редакторе.Format files are typically created by using the bcp utility and modified with a text editor as needed. Дополнительные сведения см. в разделе bcp Utility.For more information, see bcp Utility.

Применимо к: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.
Начиная с SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP-версии 1.1, аргумент format_file_path может находиться в хранилище больших двоичных объектов Azure.Beginning with SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1, the format_file_path can be in Azure blob storage.

FIELDTERMINATOR =' признак_конца_поля 'FIELDTERMINATOR ='field_terminator'
Указывает признак конца поля, используемый для файлов данных типа char и widechar.Specifies the field terminator to be used for char and widechar data files. По умолчанию, признаком конца поля является символ табуляции (\t).The default field terminator is \t (tab character). Дополнительные сведения см. в разделе Определение признаков конца поля и строки (SQL Server).For more information, see Specify Field and Row Terminators (SQL Server).

ROWTERMINATOR =' признак_конца_строки 'ROWTERMINATOR ='row_terminator'
Указывает признак конца строки, используемый для файлов данных типа char и widechar.Specifies the row terminator to be used for char and widechar data files. По умолчанию признаком конца строки является символ \r\n (символ перевода строки).The default row terminator is \r\n (newline character). Дополнительные сведения см. в разделе Определение признаков конца поля и строки (SQL Server).For more information, see Specify Field and Row Terminators (SQL Server).

СовместимостьCompatibility

Инструкция BULK INSERT осуществляет более строгую проверку загружаемых из файла данных, что может вызвать прекращение работы существующих скриптов, которые ранее работали с неправильными данными.BULK INSERT enforces strict data validation and data checks of data read from a file that could cause existing scripts to fail when they are executed on invalid data. В частности, теперь BULK INSERT проверяет следующее:For example, BULK INSERT verifies that:

  • собственные представления типов данных float или real являются допустимыми;The native representations of float or real data types are valid.

  • Данные в Юникоде имеют четную длину.Unicode data has an even-byte length.

Типы данныхData Types

Преобразование символьного типа данных в десятичныйString-to-Decimal Data Type Conversions

Преобразования символьного типа данных в десятичный, которые используются в инструкции BULK INSERT, следуют тем же правилам, что и функция Transact-SQLTransact-SQL CONVERT, которая отклоняет числовые значения в экспоненциальном представлении.The string-to-decimal data type conversions used in BULK INSERT follow the same rules as the Transact-SQLTransact-SQL CONVERT function, which rejects strings representing numeric values that use scientific notation. Такие строки инструкция BULK INSERT трактует как недопустимые и создает отчет ошибки преобразования.Therefore, BULK INSERT treats such strings as invalid values and reports conversion errors.

Чтобы решить эту проблему, применяется файл форматирования, позволяющий выполнить массовый импорт данных типа float в экспоненциальном представлении в десятичный столбец.To work around this behavior, use a format file to bulk import scientific notation float data into a decimal column. В файле форматирования необходимо явно описать столбец с типом данных real или float.In the format file, explicitly describe the column as real or float data. Дополнительные сведения об этих типах данных см. в разделе Типы данных float и real (Transact-SQL).For more information about these data types, see float and real (Transact-SQL).

Примечание

Файлы форматирования представляют данные real в виде типа данных SQLFLT4, а данные float — в виде типа данных SQLFLT8.Format files represent real data as the SQLFLT4 data type and float data as the SQLFLT8 data type. Дополнительные сведения о файлах формата, отличного от XML, см. в разделе Указание типа файлового хранилища с помощью программы bcp (SQL Server).For information about non-XML format files, see Specify File Storage Type by Using bcp (SQL Server).

Пример импорта числового значения в экспоненциальном представленииExample of Importing a Numeric Value that Uses Scientific Notation

В этом примере используется следующая таблица:This example uses the following table:

CREATE TABLE t_float(c1 float, c2 decimal (5,4));  

Пользователю необходимо выполнить массовый импорт данных в таблицу t_float.The user wants to bulk import data into the t_float table. Файл данных C:\t_float-c.dat содержит данные в экспоненциальном представлении float, например:The data file, C:\t_float-c.dat, contains scientific notation float data; for example:

8.0000000000000002E-28.0000000000000002E-2  

Однако инструкция BULK INSERT не сможет выполнить импорт этих данных непосредственно в таблицу t_float, так как второй столбец c2 имеет тип данных decimal.However, BULK INSERT cannot import this data directly into t_float, because its second column, c2, uses the decimal data type. Поэтому необходим файл форматирования.Therefore, a format file is necessary. В нем данные типа float в экспоненциальном представлении должны быть сопоставлены десятичному формату столбца c2.The format file must map the scientific notation float data to the decimal format of column c2.

Следующий файл форматирования использует тип данных SQLFLT8 для сопоставления второго поля данных со вторым столбцом:The following format file uses the SQLFLT8 data type to map the second data field to the second column:

<?xml version="1.0"?> 
<BCPFORMAT xmlns="https://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<RECORD> 
<FIELD ID="1" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="30"/> 
<FIELD ID="2" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="30"/>  </RECORD>  <ROW> 
<COLUMN SOURCE="1" NAME="c1" xsi:type="SQLFLT8"/> 
<COLUMN SOURCE="2" NAME="c2" xsi:type="SQLFLT8"/>  </ROW> </BCPFORMAT> 

Чтобы задействовать этот файл форматирования (файл C:\t_floatformat-c-xml.xml) при импорте тестовых данных в тестовую таблицу, необходимо выполнить следующую инструкцию Transact-SQLTransact-SQL:To use this format file (using the file name C:\t_floatformat-c-xml.xml) to import the test data into the test table, issue the following Transact-SQLTransact-SQL statement:

BULK INSERT bulktest..t_float  
FROM 'C:\t_float-c.dat' WITH (FORMATFILE='C:\t_floatformat-c-xml.xml');  
GO  

Важно!

База данных SQL Azure не поддерживает чтение данных из файлов Windows.Azure SQL Database does not support reading from Windows files.

Типы данных для массового экспорта или импорта документов SQLXMLData Types for Bulk Exporting or Importing SQLXML Documents

Для массового экспорта или импорта данных SQLXML используется один из следующих типов данных в файле форматирования.To bulk export or import SQLXML data, use one of the following data types in your format file:

Тип данныхData type ДействиеEffect
SQLCHAR или SQLVARCHARSQLCHAR or SQLVARCHAR Данные отправляются в кодовой странице клиента или кодовой странице, определенной параметрами сортировки.The data is sent in the client code page or in the code page implied by the collation). Тот же эффект достигается указанием параметра DATAFILETYPE ='char' без указания файла форматирования.The effect is the same as specifying the DATAFILETYPE ='char' without specifying a format file.
SQLNCHAR или SQLNVARCHARSQLNCHAR or SQLNVARCHAR Данные отправляются в Юникоде.The data is sent as Unicode. Тот же эффект достигается указанием параметра DATAFILETYPE = 'widechar' без указания файла форматирования.The effect is the same as specifying the DATAFILETYPE = 'widechar' without specifying a format file.
SQLBINARY или SQLVARBINSQLBINARY or SQLVARBIN Данные отправляются без преобразования.The data is sent without any conversion.
   

Общие замечанияGeneral Remarks

Сравнение инструкции BULK INSERT, инструкции INSERT ... SELECT * FROM OPENROWSET(BULK...) и команды bcp см. в разделе Массовый импорт и экспорт данных (SQL Server).For a comparison of the BULK INSERT statement, the INSERT ... SELECT * FROM OPENROWSET(BULK...) statement, and the bcp command, see Bulk Import and Export of Data (SQL Server).

Дополнительные сведения о подготовке данных к массовому импорту см. в разделе Подготовка данных к массовому экспорту или импорту (SQL Server).For information about preparing data for bulk import, see Prepare Data for Bulk Export or Import (SQL Server).

Инструкция BULK INSERT может выполняться внутри пользовательской транзакции для импорта данных в таблицу или представление.The BULK INSERT statement can be executed within a user-defined transaction to import data into a table or view. При необходимости использовать несколько соответствий для массового импорта данных, в транзакции можно указать предложение BATCHSIZE в инструкции BULK INSERT.Optionally, to use multiple matches for bulk importing data, a transaction can specify the BATCHSIZE clause in the BULK INSERT statement. При откате транзакции, состоящей из нескольких пакетов, каждый из пакетов, который в процессе транзакции был отправлен в SQL ServerSQL Server, откатывается.If a multiple-batch transaction is rolled back, every batch that the transaction has sent to SQL ServerSQL Server is rolled back.

СовместимостьInteroperability

Импорт данных из CSV-файлаImporting Data from a CSV file

Начиная с SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1, инструкция BULK INSERT поддерживает формат CSV.Beginning with SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1, BULK INSERT supports the CSV format.
До SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1 CSV-файлы с разделителями-запятыми не поддерживаются в операциях массового импорта SQL ServerSQL Server.Before SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1, comma-separated value (CSV) files are not supported by SQL ServerSQL Server bulk-import operations. Однако в некоторых случаях CSV-файл можно использовать в качестве файла данных для массового импорта данных в SQL ServerSQL Server.However, in some cases, a CSV file can be used as the data file for a bulk import of data into SQL ServerSQL Server. Дополнительные сведения о требованиях к импорту данных из CSV-файла см. в разделе Подготовка данных к массовому экспорту или импорту (SQL Server).For information about the requirements for importing data from a CSV data file, see Prepare Data for Bulk Export or Import (SQL Server).

Режим ведения журналаLogging Behavior

Сведения о том, когда в журнале транзакций регистрируются операции вставки строк, выполняемые при массовом импорте, см. в разделе Предварительные условия для минимального протоколирования массового импорта данных.For information about when row-insert operations that are performed by bulk import are logged in the transaction log, see Prerequisites for Minimal Logging in Bulk Import.

ОграниченияRestrictions

При использовании файла форматирования с BULK INSERT можно указать не более 1024 полей.When using a format file with BULK INSERT, you can specify up to 1024 fields only. Это значение совпадает с максимальным числом столбцов в таблице.This is same as the maximum number of columns allowed in a table. При использовании инструкции BULK INSERT с файлом данных, который содержит больше 1024 поля, формируется ошибка 4822.If you use BULK INSERT with a data file that contains more than 1024 fields, BULK INSERT generates the 4822 error. Программа bcp не имеет этого ограничения, поэтому для файлов данных, которые содержат больше 1024 поля, используйте команду bcp.The bcp utility does not have this limitation, so for data files that contain more than 1024 fields, use the bcp command.

Вопросы производительностиPerformance Considerations

Если число страниц, которые должны быть записаны на диск в едином пакете, превышает внутренний порог, может быть произведен полный просмотр буферного пула для определения страниц, подлежащих записи на диск при фиксации пакета.If the number of pages to be flushed in a single batch exceeds an internal threshold, a full scan of the buffer pool might occur to identify which pages to flush when the batch commits. Такой полный просмотр может повредить производительности массового импорта.This full scan can hurt bulk-import performance. Превышение внутреннего порога может возникнуть, если большой буферный пул работает с медленной подсистемой ввода-вывода.A likely case of exceeding the internal threshold occurs when a large buffer pool is combined with a slow I/O subsystem. Избежать переполнения буфера на больших компьютерах можно либо отказавшись от использования указания TABLOCK (что удалит оптимизацию массовых операций), либо задав меньший размер пакета (что сохранит оптимизацию массовых операций).To avoid buffer overflows on large machines, either do not use the TABLOCK hint (which will remove the bulk optimizations) or use a smaller batch size (which preserves the bulk optimizations).

В связи с различиями в компьютерах рекомендуется испытать свою рабочую нагрузку с различными размерами пакетов, чтобы выявить оптимальный вариант.Because computers vary, we recommend that you test various batch sizes with your data load to find out what works best for you.

безопасностьSecurity

Делегирование учетных записей безопасности (Олицетворение)Security Account Delegation (Impersonation)

Если пользователь использует имя входа SQL ServerSQL Server , то применяется профиль безопасности учетной записи процесса SQL ServerSQL Server .If a user uses a SQL ServerSQL Server login, the security profile of the SQL ServerSQL Server process account is used. За пределами компонента Database Engine невозможно выполнить проверку подлинности имени входа, проходящего проверку подлинности SQL Server.A login using SQL Server authentication cannot be authenticated outside of the Database Engine. Поэтому, если имя входа, использующее проверку подлинности SQL Server, инициирует команду BULK INSERT, подключение к данным устанавливается с помощью контекста безопасности учетной записи процесса SQL Server (учетной записи, которая используется службой SQL Server Database Engine).Therefore, when a BULK INSERT command is initiated by a login using SQL Server authentication, the connection to the data is made using the security context of the SQL Server process account (the account used by the SQL Server Database Engine service). Для того чтобы прочитать исходные данные, учетной записи, которая используется службой SQL Server Database Engine, необходимо предоставить доступ к этим исходным данным. Если же пользователь SQL ServerSQL Server входит в систему с проверкой подлинности Windows, то ему доступны только те файлы, к которым имеет доступ учетная запись пользователя, независимо от профиля безопасности процесса SQL ServerSQL Server.To successfully read the source data you must grant the account used by the SQL Server Database Engine, access to the source data.In contrast, if a SQL ServerSQL Server user logs on by using Windows Authentication, the user can read only those files that can be accessed by the user account, regardless of the security profile of the SQL ServerSQL Server process.

Если с помощью программы sqlcmd или osql инструкция BULK INSERT выполняется на одном компьютере, вставка данных происходит в SQL ServerSQL Server на другом компьютере, а аргумент data_file указывается на третьем компьютере с помощью UNC-пути, то может возникнуть ошибка 4861.When executing the BULK INSERT statement by using sqlcmd or osql, from one computer, inserting data into SQL ServerSQL Server on a second computer, and specifying a data_file on third computer by using a UNC path, you may receive a 4861 error.

Чтобы решить эту проблему, воспользуйтесь проверкой подлинности SQL ServerSQL Server и укажите имя входа SQL ServerSQL Server, которое использует профиль безопасности учетной записи процесса SQL ServerSQL Server, либо настройте Windows для делегирования учетных записей безопасности.To resolve this error, use SQL ServerSQL Server Authentication and specify a SQL ServerSQL Server login that uses the security profile of the SQL ServerSQL Server process account, or configure Windows to enable security account delegation. Дополнительные сведения о том, как сделать учетную запись пользователя доступной для делегирования, см. в справке по Windows.For information about how to enable a user account to be trusted for delegation, see Windows Help.

Дополнительные сведения о вопросах безопасности при использовании BULK INSERT см. в статье Массовый импорт данных при помощи инструкции BULK INSERT или OPENROWSET(BULK...) (SQL Server).For more information about this and other security considerations for using BULK INSERT, see Import Bulk Data by Using BULK INSERT or OPENROWSET(BULK...) (SQL Server).

РазрешенияPermissions

Требует разрешений INSERT и ADMINISTER BULK OPERATIONS.Requires INSERT and ADMINISTER BULK OPERATIONS permissions. В базе данных SQL Azure требуются разрешения INSERT и ADMINISTER DATABASE BULK OPERATIONS.In Azure SQL Database, INSERT and ADMINISTER DATABASE BULK OPERATIONS permissions are required. Кроме того, необходимо разрешение ALTER TABLE, если выполняется одно из следующих условий.Additionally, ALTER TABLE permission is required if one or more of the following is true:

  • Существуют ограничения, и параметр CHECK_CONSTRAINTS не указан.Constraints exist and the CHECK_CONSTRAINTS option is not specified.

    Примечание

    Ограничения отключены по умолчанию.Disabling constraints is the default behavior. Чтобы проверить ограничения явно, укажите параметр CHECK_CONSTRAINTS.To check constraints explicitly, use the CHECK_CONSTRAINTS option.

  • Триггеры существуют, и параметр FIRE_TRIGGER не указан.Triggers exist and the FIRE_TRIGGER option is not specified.

    Примечание

    По умолчанию, триггеры не срабатывают.By default, triggers are not fired. Чтобы явно включить триггеры, укажите параметр FIRE_TRIGGER.To fire triggers explicitly, use the FIRE_TRIGGER option.

  • Для импорта значений идентификаторов из файла данных указан параметр KEEPIDENTITY.You use the KEEPIDENTITY option to import identity value from data file.

ПримерыExamples

A.A. Применение символа вертикальной черты для импорта данных из файлаUsing pipes to import data from a file

В следующем примере выполняется импорт подробных сведений о заказах из указанного файла данных в таблицу AdventureWorks2012.Sales.SalesOrderDetail, используя символ вертикальной черты (|) в качестве признака конца столбца и |\n в качестве признака конца строки.The following example imports order detail information into the AdventureWorks2012.Sales.SalesOrderDetail table from the specified data file by using a pipe (|) as the field terminator and |\n as the row terminator.

BULK INSERT AdventureWorks2012.Sales.SalesOrderDetail  
   FROM 'f:\orders\lineitem.tbl'  
   WITH   
      (  
         FIELDTERMINATOR =' |',  
         ROWTERMINATOR =' |\n'  
      );  

Важно!

База данных SQL Azure не поддерживает чтение данных из файлов Windows.Azure SQL Database does not support reading from Windows files.

Б.B. Применение аргумента FIRE_TRIGGERSUsing the FIRE_TRIGGERS argument

В следующем примере указывается аргумент FIRE_TRIGGERS.The following example specifies the FIRE_TRIGGERS argument.

BULK INSERT AdventureWorks2012.Sales.SalesOrderDetail  
   FROM 'f:\orders\lineitem.tbl'  
   WITH  
     (  
        FIELDTERMINATOR =' |',  
        ROWTERMINATOR = ':\n',  
        FIRE_TRIGGERS  
      );  

Важно!

База данных SQL Azure не поддерживает чтение данных из файлов Windows.Azure SQL Database does not support reading from Windows files.

В.C. Применение символа перевода строки в качестве признака конца строкиUsing line feed as a row terminator

В следующем примере производится импорт файла, в котором в качестве признака конца строки используется символ перевода строки, как в файлах UNIX.The following example imports a file that uses the line feed as a row terminator such as a UNIX output:

DECLARE @bulk_cmd varchar(1000);  
SET @bulk_cmd = 'BULK INSERT AdventureWorks2012.Sales.SalesOrderDetail  
FROM ''<drive>:\<path>\<filename>''   
WITH (ROWTERMINATOR = '''+CHAR(10)+''')';  
EXEC(@bulk_cmd);  

Примечание

В соответствии с тем, как в Microsoft Windows обрабатываются текстовые файлы, (\n автоматически заменяется на \r\n) .Due to how Microsoft Windows treats text files (\n automatically gets replaced with \r\n).

Важно!

База данных SQL Azure не поддерживает чтение данных из файлов Windows.Azure SQL Database does not support reading from Windows files.

Г.D. Указание кодовой страницыSpecifying a code page

В следующем примере показано указание кодовой страницы.The following example show how to specify a code page.

BULK INSERT MyTable  
FROM 'D:\data.csv'  
WITH  
( CODEPAGE = '65001',  
    DATAFILETYPE = 'char',  
    FIELDTERMINATOR = ','  
);  

Важно!

База данных SQL Azure не поддерживает чтение данных из файлов Windows.Azure SQL Database does not support reading from Windows files.

Д.E. Импорт данных из CSV-файлаImporting data from a CSV file

В следующем примере показано, как указать CSV-файл без заголовка (первая строка), используя ; в качестве признака конца поля и 0x0a в качестве признака конца строки.The following example show how to specify a CSV file, skipping the header (first row), using ; as field terminator and 0x0a as line terminator:

BULK INSERT Sales.Invoices
FROM '\\share\invoices\inv-2016-07-25.csv'
WITH (FORMAT = 'CSV',
      FIRSTROW=2,
      FIELDQUOTE = '\',
      FIELDTERMINATOR = ';', 
      ROWTERMINATOR = '0x0a'); 

Важно!

База данных SQL Azure не поддерживает чтение данных из файлов Windows.Azure SQL Database does not support reading from Windows files.

Е.F. Импорт данных из файла в хранилище BLOB-объектов AzureImporting data from a file in Azure blob storage

В следующем примере показано, как загрузить данные из CSV-файла в расположение хранилища BLOB-объектов Azure, которое была настроено в качестве внешнего источника данных.The following example shows how to load data from a csv file in an Azure blob storage location, which has been configured as an external data source. Для этого требуются учетные данные для базы с подписанным URL-адресом.This requires a database scoped credential using a shared access signature.

CREATE DATABASE SCOPED CREDENTIAL MyAzureBlobStorageCredential 
 WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
 SECRET = '******srt=sco&sp=rwac&se=2017-02-01T00:55:34Z&st=2016-12-29T16:55:34Z***************';
 
 -- NOTE: Make sure that you don't have a leading ? in SAS token, and
 -- that you have at least read permission on the object that should be loaded srt=o&sp=r, and
 -- that expiration period is valid (all dates are in UTC time)

CREATE EXTERNAL DATA SOURCE MyAzureBlobStorage
WITH (  TYPE = BLOB_STORAGE, 
        LOCATION = 'https://****************.blob.core.windows.net/invoices', 
        CREDENTIAL= MyAzureBlobStorageCredential    --> CREDENTIAL is not required if a blob has public access!
);

BULK INSERT Sales.Invoices
FROM 'inv-2017-12-08.csv'
WITH (DATA_SOURCE = 'MyAzureBlobStorage'); 

Важно!

База данных SQL Azure не поддерживает чтение данных из файлов Windows.Azure SQL Database does not support reading from Windows files.

Ж.G. Импорт данных из файла в хранилище BLOB-объектов Azure и определение файла с ошибкойImporting data from a file in Azure blob storage and specifying an error file

В следующем примере показано, как загрузить данные из CSV-файла в расположение хранилища BLOB-объектов Azure, которое была настроено в качестве внешнего источника данных, и определить файл с ошибкой.The following example shows how to load data from a csv file in an Azure blob storage location, which has been configured as an external data source and also specifying an error file. Для этого требуются учетные данные для базы с подписанным URL-адресом.This requires a database scoped credential using a shared access signature. Обратите внимание: при выполнении базы данных SQL Azure параметр ERRORFILE должен использоваться вместе с ERRORFILE_DATA_SOURCE. В противном случае импорт может завершиться с ошибкой разрешения.Note that if running on Azure SQL Database, ERRORFILE option should be accompanied by ERRORFILE_DATA_SOURCE otherwise the import might fail with permissions error. Файл, указанный в ERRORFILE, не должен существовать в контейнере.The file specified in ERRORFILE should not exist in the container.

BULK INSERT Sales.Invoices
FROM 'inv-2017-12-08.csv'
WITH (DATA_SOURCE = 'MyAzureInvoices',
     FORMAT = 'CSV',
     ERRORFILE = 'MyErrorFile',
     ERRORFILE_DATA_SOURCE = 'MyAzureInvoices'); 

Полные примеры использования функции BULK INSERT, включая настройку учетных данных и внешнего источника данных, см. в статье Примеры массового доступа к данным в хранилище BLOB-объектов Azure.For complete BULK INSERT examples including configuring the credential and external data source, see Examples of Bulk Access to Data in Azure Blob Storage.

Дополнительные примерыAdditional Examples

Другие примеры использования BULK INSERTсодержатся в следующих разделах:Other BULK INSERT examples are provided in the following topics:

См. также:See Also

Массовый импорт и экспорт данных (SQL Server) Bulk Import and Export of Data (SQL Server)
bcp Utility bcp Utility
Файлы форматирования для импорта или экспорта данных (SQL Server) Format Files for Importing or Exporting Data (SQL Server)
INSERT (Transact-SQL) INSERT (Transact-SQL)
OPENROWSET (Transact-SQL) OPENROWSET (Transact-SQL)
Подготовка данных к массовому экспорту или импорту (SQL Server) Prepare Data for Bulk Export or Import (SQL Server)
sp_tableoption (Transact-SQL)sp_tableoption (Transact-SQL)