OPENROWSET (Transact-SQL)OPENROWSET (Transact-SQL)

ОБЛАСТЬ ПРИМЕНЕНИЯ: даSQL Server (начиная с 2008)даБаза данных SQL Azure (только управляемый экземпляр)нетХранилище данных SQL AzureнетParallel Data WarehouseAPPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database (Managed Instance only) noAzure SQL Data Warehouse noParallel Data Warehouse

Содержит все необходимые сведения о соединении, которые требуются для доступа к удаленным данным источника данных OLE DB.Includes all connection information that is required to access remote data from an OLE DB data source. Это альтернативный метод для доступа к таблицам на связанном сервере и является однократным нерегламентированным методом соединения и удаленного доступа к данным с помощью OLE DB.This method is an alternative to accessing tables in a linked server and is a one-time, ad hoc method of connecting and accessing remote data by using OLE DB. Вместо этого для более частых ссылок на источники данных OLE DB используйте связанные серверы.For more frequent references to OLE DB data sources, use linked servers instead. Дополнительные сведения см. в разделе Связанные серверы (компонент Database Engine).For more information, see Linked Servers (Database Engine). Из предложения FROM запроса можно ссылаться на функцию OPENROWSET как на имя таблицы.The OPENROWSET function can be referenced in the FROM clause of a query as if it were a table name. Функция OPENROWSET также может использоваться как целевая таблица в инструкции INSERT, UPDATE или DELETE. Это зависит от возможностей поставщика OLE DB.The OPENROWSET function can also be referenced as the target table of an INSERT, UPDATE, or DELETE statement, subject to the capabilities of the OLE DB provider. Несмотря на то, что запрос может возвратить несколько результирующих наборов, функция OPENROWSET возвращает только первый из них.Although the query might return multiple result sets, OPENROWSET returns only the first one.

Функция OPENROWSET также поддерживает массовые операции с помощью встроенного поставщика BULK, позволяющего считывать данные из файла и возвращать их в виде набора строк.OPENROWSET also supports bulk operations through a built-in BULK provider that enables data from a file to be read and returned as a rowset.

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

СинтаксисSyntax

  
OPENROWSET   
( { 'provider_name' , { 'datasource' ; 'user_id' ; 'password'   
   | 'provider_string' }   
   , {   [ catalog. ] [ schema. ] object   
       | 'query'   
     }   
   | BULK 'data_file' ,   
       { FORMATFILE = 'format_file_path' [ <bulk_options> ]  
       | SINGLE_BLOB | SINGLE_CLOB | SINGLE_NCLOB }  
} )   
  
<bulk_options> ::=  
   [ , CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' } ]   
   [ , DATASOURCE = 'data_source_name' ]
   [ , ERRORFILE = 'file_name' ]  
   [ , ERRORFILE_DATASOURCE = 'data_source_name' ]   
   [ , FIRSTROW = first_row ]   
   [ , LASTROW = last_row ]   
   [ , MAXERRORS = maximum_errors ]   
   [ , ROWS_PER_BATCH = rows_per_batch ]  
   [ , ORDER ( { column [ ASC | DESC ] } [ ,...n ] ) [ UNIQUE ] ]
  
   -- bulk_options related to input file format
   [ , FORMAT = 'CSV' ]
   [ , FIELDQUOTE = 'quote_characters']
   [ , FORMATFILE = 'format_file_path' ]   

АргументыArguments

'provider_name''provider_name'
Символьная строка, которая представляет понятное имя (или PROGID) поставщика OLE DB, указанное в реестре.Is a character string that represents the friendly name (or PROGID) of the OLE DB provider as specified in the registry. Аргумент provider_name не имеет значения по умолчанию.provider_name has no default value.

'datasource''datasource'
Строковая константа, соответствующая конкретному источнику данных OLE DB.Is a string constant that corresponds to a particular OLE DB data source. Аргумент datasource — это свойство DBPROP_INIT_DATASOURCE, которое должно быть передано в интерфейс IDBProperties поставщика для инициализации поставщика.datasource is the DBPROP_INIT_DATASOURCE property to be passed to the IDBProperties interface of the provider to initialize the provider. Обычно эта строка содержит имя файла базы данных, имя сервера баз данных или имя, с помощью которого поставщик находит базу или базы данных.Typically, this string includes the name of the database file, the name of a database server, or a name that the provider understands to locate the database or databases.

'user_id''user_id'
Строковая константа, представляющая имя пользователя, передаваемое указанному поставщику OLE DB.Is a string constant that is the user name passed to the specified OLE DB provider. Аргумент user_id указывает контекст безопасности для подключения и передается как свойство DBPROP_AUTH_USERID для инициализации поставщика.user_id specifies the security context for the connection and is passed in as the DBPROP_AUTH_USERID property to initialize the provider. Аргумент user_id не может быть именем входа Microsoft Windows.user_id cannot be a Microsoft Windows login name.

'password''password'
Строковая константа, представляющая пароль пользователя, передаваемый поставщику OLE DB.Is a string constant that is the user password to be passed to the OLE DB provider. Аргумент password передается как свойство DBPROP_AUTH_PASSWORD при инициализации поставщика.password is passed in as the DBPROP_AUTH_PASSWORD property when initializing the provider. Аргумент password не может быть паролем Microsoft Windows.password cannot be a Microsoft Windows password.

'provider_string''provider_string'
Строковая константа для конкретного поставщика, которая передается как свойство DBPROP_INIT_PROVIDERSTRING для инициализации поставщика OLE DB.Is a provider-specific connection string that is passed in as the DBPROP_INIT_PROVIDERSTRING property to initialize the OLE DB provider. Аргумент provider_string обычно инкапсулирует все необходимые сведения о подключении для инициализации поставщика.provider_string typically encapsulates all the connection information required to initialize the provider. Список ключевых слов, распознаваемых поставщиком OLE DB для собственного клиента SQL ServerSQL Server, см. в разделе Свойства инициализации и авторизации.For a list of keywords that are recognized by the SQL ServerSQL Server Native Client OLE DB provider, see Initialization and Authorization Properties.

catalogcatalog
Имя каталога или базы данных, в котором хранится указанный объект.Is the name of the catalog or database in which the specified object resides.

schemaschema
Имя схемы или владелец указанного объекта.Is the name of the schema or object owner for the specified object.

objectobject
Имя объекта, уникальным образом идентифицирующее объект, с которым производится взаимодействие.Is the object name that uniquely identifies the object to work with.

'query''query'
Строковая константа, посылаемая поставщику и исполняемая им.Is a string constant sent to and executed by the provider. Локальный экземпляр SQL ServerSQL Server не обрабатывает этот запрос, но обрабатывает результаты запроса, возвращаемые поставщиком, это так называемый транзитный запрос.The local instance of SQL ServerSQL Server does not process this query, but processes query results returned by the provider, a pass-through query. Передаваемые запросы полезны при использовании поставщиков, которые не предоставляют свои табличные данные через таблицы имен, а только через командный язык.Pass-through queries are useful when used on providers that do not make available their tabular data through table names, but only through a command language. Передаваемые запросы поддерживаются на удаленном сервере настолько, насколько поставщик запросов поддерживает объект OLE DB Command и его обязательные интерфейсы.Pass-through queries are supported on the remote server, as long as the query provider supports the OLE DB Command object and its mandatory interfaces. Дополнительные сведения см. в статье SQL Server Native Client (OLE DB).For more information, see SQL Server Native Client (OLE DB) Reference.

BULKBULK
Использует поставщик больших наборов строк для функции OPENROWSET, чтобы читать данные из файла.Uses the BULK rowset provider for OPENROWSET to read data from a file. В SQL ServerSQL Server функция OPENROWSET может считывать данные из файла без их загрузки в целевую таблицу.In SQL ServerSQL Server, OPENROWSET can read from a data file without loading the data into a target table. Это позволяет использовать функцию OPENROWSET совместно с обычной инструкцией SELECT.This lets you use OPENROWSET with a simple SELECT statement.

Важно!

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

Аргументы параметра BULK позволяют полностью управлять началом и концом считывания данных, отладку ошибок и способ обработки полученных данных.The arguments of the BULK option allow for significant control over where to start and end reading data, how to deal with errors, and how data is interpreted. Например, можно указать, что файл с данными будет считан как набор строк типа varbinary, varchar или nvarchar из одной строки и одного столбца.For example, you can specify that the data file be read as a single-row, single-column rowset of type varbinary, varchar, or nvarchar. Поведение по умолчанию описано в следующем далее описании аргументов.The default behavior is described in the argument descriptions that follow.

Дополнительные сведения об использовании параметра BULK см. в подразделе «Примечания» далее в этом разделе.For information about how to use the BULK option, see "Remarks," later in this topic. Дополнительные сведения о разрешениях, необходимых параметру BULK, см. в подразделе «Разрешения» далее в этом разделе.For information about the permissions that are required by the BULK option, see "Permissions," later in this topic.

Примечание

Функция OPENROWSET (BULK ...) не оптимизирует ведение журнала при использовании ее для импорта данных с моделью полного восстановления.When used to import data with the full recovery model, OPENROWSET (BULK ...) does not optimize logging.

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

'data_file''data_file'
Полный путь к файлу данных, данные из которого копируются в целевую таблицу.Is the full path of the data file whose data is to be copied into the target table.
Применимо к: 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 может находиться в хранилище BLOB-объектов Azure.Beginning with SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1, the data_file can be in Azure blob storage. Примеры см. в статье Примеры массового доступа к данным в хранилище BLOB-объектов Azure.For examples, see Examples of Bulk Access to Data in Azure Blob Storage.

Важно!

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

<bulk_options><bulk_options>
Указывает один или более аргументов для параметра BULK.Specifies one or more arguments for the BULK option.

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 more than 127 or less than 32.

Важно!

Параметр CODEPAGE не поддерживается в Linux.CODEPAGE is not a supported option on Linux.

Примечание

Рекомендуется указывать имя параметра сортировки для каждого столбца в файле форматирования, кроме случаев, когда параметр 65001 должен иметь приоритет над спецификацией параметров сортировки или кодовой страницы.We recommend that you specify a collation name for each column in a format file, except when you want the 65001 option to have priority over the collation/code page specification.

Значение аргумента CODEPAGECODEPAGE value ОписаниеDescription
ACPACP Столбцы типа char, varchar или text преобразуются из кодовой страницы ANSI или MicrosoftMicrosoft Windows (ISO 1252) в кодовую страницу SQL ServerSQL Server.Converts columns of char, varchar, or text data type from the ANSI/MicrosoftMicrosoft Windows code page (ISO 1252) to the SQL ServerSQL Server code page.
OEM (по умолчанию)OEM (default) Столбцы типа char, varchar или text преобразуются из системной кодовой страницы OEM в кодовую страницу SQL ServerSQL Server.Converts columns of char, varchar, or text data type from the system OEM code page to the SQL ServerSQL Server code page.
RAWRAW Преобразование из одной кодовой страницы в другую не выполняется.No conversion occurs from one code page to another. Это наиболее быстрый параметр.This is the fastest option.
code_pagecode_page Показывает исходную кодовую страницу, в которой представлены символы в файле данных, например 850.Indicates the source code page on which the character data in the data file is encoded; 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).

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 at the start of the command execution. Если он уже существует, возникнет ошибка.An error will be raised if the file already exists. Дополнительно создается управляющий файл с расширением ERROR.txt.Additionally, a control file that has the extension .ERROR.txt is created. Этот файл ссылается на каждую строку в файле ошибок и позволяет провести их диагностику.This file references each row in the error file and provides error diagnostics. После исправления ошибок данные могут быть загружены.After 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. Значение по умолчанию равно 1.The default is 1. Значение по умолчанию — первая строка указанного файла данных.This indicates the first row in the specified data file. Номера строк определяются с помощью подсчета признаков конца строки.The row numbers are determined by counting the row terminators. Значения аргумента FIRSTROW начинаются с 1.FIRSTROW is 1-based.

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

MAXERRORS =maximum_errorsMAXERRORS =maximum_errors
Указывает максимальное количество синтаксических ошибок или ошибок форматирования строк, указанное в файле форматирования, которое может произойти до того, как функция OPENROWSET сформирует исключение.Specifies the maximum number of syntax errors or nonconforming rows, as defined in the format file, that can occur before OPENROWSET throws an exception. Пока значение MAXERRORS не достигнуто, функция OPENROWSET не учитывает все ошибочные строки, не загружая их, и считает каждую ошибочную строку за одну ошибку.Until MAXERRORS is reached, OPENROWSET ignores each bad row, not loading it, and counts the bad row as one error.

Значение по умолчанию для maximum_errors — 10.The default for maximum_errors is 10.

Примечание

Аргумент MAX_ERRORS не применяет ограничения CHECK или преобразования типов money и bigint.MAX_ERRORS does not apply to CHECK constraints, or to converting money and bigint data types.

ROWS_PER_BATCH =rows_per_batchROWS_PER_BATCH =rows_per_batch
Указывает примерное количество строк данных в файле данных.Specifies the approximate number of rows of data in the data file. Значение должно быть того же порядка, что и реальное количество строк.This value should be of the same order as the actual number of rows.

Функция OPENROWSET всегда импортирует файл данных в одном пакете.OPENROWSET always imports a data file as a single batch. Однако при задании аргумента rows_per_batch со значением > 0 обработчик запросов использует значение rows_per_batch в качестве указания для назначения ресурсов в плане запроса.However, if you specify rows_per_batch with a value > 0, the query processor uses the value of rows_per_batch as a hint for allocating resources in the query plan.

По умолчанию значение аргумента ROWS_PER_BATCH неизвестно.By default, ROWS_PER_BATCH is unknown. Указание аргумента ROWS_PER_BATCH = 0 равносильно опусканию аргумента ROWS_PER_BATCH.Specifying ROWS_PER_BATCH = 0 is the same as omitting ROWS_PER_BATCH.

ORDER ( { column [ ASC | DESC ] } [ ,... n ] [ UNIQUE ] )ORDER ( { column [ ASC | DESC ] } [ ,... n ] [ UNIQUE ] )
Необязательное указание; задает, каким образом отсортированы данные в файле.An optional hint that specifies how the data in the data file is sorted. По умолчанию массовая операция считает, что файл данных не упорядочен.By default, the bulk operation assumes the data file is unordered. Производительность можно повысить, если оптимизатор запросов сможет использовать заданный порядок для создания более эффективного плана запроса.Performance might improve if the order specified can be exploited by the query optimizer to generate a more efficient query plan. Ниже приведены примеры, в которых указано, когда полезно назначить сортировку.Examples for when specifying a sort can be beneficial include the following:

  • Вставка строк в таблицу с кластеризованным индексом, в которой данные набора строк сортируются по ключу кластеризованного индекса.Inserting rows into a table that has a clustered index, where the rowset data is sorted on the clustered index key.

  • Соединение набора строк с другой таблицей с совпадающими столбцами сортировки и соединения.Joining the rowset with another table, where the sort and join columns match.

  • Статистическая обработка данных набора строк по столбцам сортировки.Aggregating the rowset data by the sort columns.

  • Использование набора строк как исходной таблицы в предложении FROM запроса с совпадающими столбцами сортировки и соединения.Using the rowset as a source table in the FROM clause of a query, where the sort and join columns match.

Подсказка UNIQUE указывает, что в файле данных нет повторяющихся записей.UNIQUE specifies that the data file does not have duplicate entries.

Если собственные строки файла данных не отсортированы в соответствии с заданным порядком или если задано указание UNIQUE и присутствуют повторяющиеся ключи, то будет возвращена ошибка.If the actual rows in the data file are not sorted according to the order that is specified, or if the UNIQUE hint is specified and duplicates keys are present, an error is returned.

При использовании ORDER обязательны псевдонимы столбцов.Column aliases are required when ORDER is used. Список псевдонимов столбцов должен ссылаться на производную таблицу, к которой обращается предложение BULK.The column alias list must reference the derived table that is being accessed by the BULK clause. Имена столбцов, указанных в предложении ORDER, ссылаются на список псевдонимов столбцов.The column names that are specified in the ORDER clause refer to this column alias list. Нельзя указывать столбцы типов больших значений (varchar(max), nvarchar(max), varbinary(max) и xml) и типов больших объектов (text, ntext и image).Large value types (varchar(max), nvarchar(max), varbinary(max), and xml) and large object (LOB) types (text, ntext, and image) columns cannot be specified.

SINGLE_BLOBSINGLE_BLOB
Возвращает содержимое файла data_file в виде набора строк с одной строкой и одним столбцом типа varbinary(max).Returns the contents of data_file as a single-row, single-column rowset of type varbinary(max).

Важно!

XML-данные рекомендуется импортировать с помощью параметра SINGLE_BLOB, а не SINGLE_CLOB или SINGLE_NCLOB, потому что только параметр SINGLE_BLOB поддерживает все возможные преобразования кодировок в Windows.We recommend that you import XML data only using the SINGLE_BLOB option, rather than SINGLE_CLOB and SINGLE_NCLOB, because only SINGLE_BLOB supports all Windows encoding conversions.

SINGLE_CLOBSINGLE_CLOB
Считывает файл data_file как ASCII-файл, возвращая содержимое в виде набора строк с одной строкой и одним столбцом типа varchar(max) и используя параметры сортировки текущей базы данных.By reading data_file as ASCII, returns the contents as a single-row, single-column rowset of type varchar(max), using the collation of the current database.

SINGLE_NCLOBSINGLE_NCLOB
Считывает файл data_file в Юникоде, возвращая содержимое в виде набора строк с одной строкой и одним столбцом типа nvarchar(max) и используя параметры сортировки текущей базы данных.By reading data_file as UNICODE, returns the contents as a single-row, single-column rowset of type nvarchar(max), using the collation of the current database.

Параметры формата входного файла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.

FORMATFILE ='format_file_path'FORMATFILE ='format_file_path'
Указывает полный путь к файлу форматирования.Specifies the full path of a format file. SQL ServerSQL Server поддерживает два типа файлов форматирования: XML и отличный от XML.supports two types of format files: XML and non-XML.

Файл форматирования необходим для определения типов столбцов в результирующем наборе.A format file is required to define column types in the result set. Единственное исключение — случай, когда указаны аргументы SINGLE_CLOB, SINGLE_BLOB или SINGLE_NCLOB, при которых файл форматирования не обязателен.The only exception is when SINGLE_CLOB, SINGLE_BLOB, or SINGLE_NCLOB is specified; in which case, the format file is not required.

Сведения о файлах форматирования см. в разделе Использование файла форматирования для массового импорта данных (SQL Server).For information about format files, see Use a Format File to Bulk Import Data (SQL Server).

Применимо к: 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. Примеры см. в статье Примеры массового доступа к данным в хранилище BLOB-объектов Azure.For examples, see Examples of Bulk Access to Data in Azure Blob Storage.

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.

RemarksRemarks

Функцию OPENROWSET можно использовать для доступа к удаленным данным из источников OLE DB только в том случае, если параметр реестра DisallowAdhocAccess явно содержит значение 0 для указанного поставщика, а также если включен расширенный параметр конфигурации Ad Hoc Distributed Queries.OPENROWSET can be used to access remote data from OLE DB data sources only when the DisallowAdhocAccess registry option is explicitly set to 0 for the specified provider, and the Ad Hoc Distributed Queries advanced configuration option is enabled. Если эти параметры не установлены, поведение по умолчанию запрещает нерегламентированный доступ.When these options are not set, the default behavior does not allow for ad hoc access.

При удаленном доступе к источнику данных OLE DB автоматическое делегирование идентификатора имени входа доверительных соединений с сервера, к которому подключен клиент, на запрашиваемый сервер не выполняется.When accessing remote OLE DB data sources, the login identity of trusted connections is not automatically delegated from the server on which the client is connected to the server that is being queried. Делегирование проверки подлинности должно быть настроено.Authentication delegation must be configured.

Имена каталога или схемы необходимы, если поставщик OLE DB поддерживает несколько каталогов и схем для указанного источника данных.Catalog and schema names are required if the OLE DB provider supports multiple catalogs and schemas in the specified data source. Значения аргументов catalog и schema можно не указывать, если поставщик OLE DB их не поддерживает.Values for catalog and )schema can be omitted when the OLE DB provider does not support them. Если поставщик поддерживает только имена схем, необходимо указать двухкомпонентное имя в формате схема.объект.If the provider supports only schema names, a two-part name of the form schema.object must be specified. Если поставщик поддерживает только имена каталогов, необходимо указать трехкомпонентное имя в формате каталог.схема.объект.If the provider supports only catalog names, a three-part name of the form catalog.schema.object must be specified. Для передаваемых запросов, использующих поставщик OLE DB для собственного клиента SQL ServerSQL Server, необходимо указать трехкомпонентное имя.Three-part names must be specified for pass-through queries that use the SQL ServerSQL Server Native Client OLE DB provider. Дополнительные сведения см. в статье Синтаксические обозначения в Transact-SQL (Transact-SQL).For more information, see Transact-SQL Syntax Conventions (Transact-SQL).

В качестве аргументов в функции OPENROWSET нельзя использовать переменные.OPENROWSET does not accept variables for its arguments.

Любой вызов функции OPENDATASOURCE, OPENQUERY или OPENROWSET в предложении FROM вычисляется отдельно и независимо от любого вызова этих функций, используемого как назначение при обновлении, даже если в двух таких вызовах будут заданы идентичные аргументы.Any call to OPENDATASOURCE, OPENQUERY, or OPENROWSET in the FROM clause is evaluated separately and independently from any call to these functions used as the target of the update, even if identical arguments are supplied to the two calls. В частности, условия фильтра или соединения, применяемые к результатам одного из таких вызовов, никак не влияют на результаты другого.In particular, filter or join conditions applied on the result of one of those calls have no effect on the results of the other.

Применение инструкции OPENROWSET с параметром BULKUsing OPENROWSET with the BULK Option

Следующие усовершенствования Transact-SQLTransact-SQL поддерживают функцию OPENROWSET(BULK…).The following Transact-SQLTransact-SQL enhancements support the OPENROWSET(BULK...) function:

  • Предложение FROM, используемое в инструкции SELECT, может вызывать OPENROWSET(BULK...) вместо имени таблицы с полной функциональностью инструкции SELECT.A FROM clause that is used with SELECT can call OPENROWSET(BULK...) instead of a table name, with full SELECT functionality.

    Функции OPENROWSET с параметром BULK требуется корреляционное имя, также известное как переменная диапазона или псевдоним в предложении FROM.OPENROWSET with the BULK option requires a correlation name, also known as a range variable or alias, in the FROM clause. Могут быть указаны псевдонимы столбцов.Column aliases can be specified. Если список псевдонимов столбцов не указан, файл форматирования должен содержать имена столбцов.If a column alias list is not specified, the format file must have column names. Указание псевдонимов столбцов переопределяет имена столбцов в файле форматирования, такие как:Specifying column aliases overrides the column names in the format file, such as:

    FROM OPENROWSET(BULK...) AS table_alias

    FROM OPENROWSET(BULK...) AS table_alias(column_alias,...n)

Важно!

Сбой при добавлении AS <table_alias> приведет к ошибке:Failure to add the AS <table_alias> will result in the error:
сообщение 491, уровень 16, состояние 1, строка 20Msg 491, Level 16, State 1, Line 20
Корреляционное имя должно быть указано для группового набора строк в предложении FROM.A correlation name must be specified for the bulk rowset in the from clause.

  • Инструкция SELECT...FROM OPENROWSET(BULK...) запрашивает данные в файле напрямую, не импортируя их в таблицу.A SELECT...FROM OPENROWSET(BULK...) statement queries the data in a file directly, without importing the data into a table. Кроме того, инструкции SELECT...FROM OPENROWSET(BULK...) могут перечислять псевдонимы массовых столбцов, используя файл форматирования для указания имен столбцов и типов данных.SELECT...FROM OPENROWSET(BULK...) statements can also list bulk-column aliases by using a format file to specify column names, and also data types.

  • Использование OPENROWSET(BULK...) в качестве исходной таблицы в инструкции INSERT или MERGE обеспечивает массовый импорт данных из файла в таблицу SQL ServerSQL Server.Using OPENROWSET(BULK...) as a source table in an INSERT or MERGE statement bulk imports data from a data file into a SQL ServerSQL Server table. Дополнительные сведения см. в разделе Массовый импорт данных при помощи инструкции BULK INSERT или OPENROWSET(BULK...) (SQL Server).For more information, see Import Bulk Data by Using BULK INSERT or OPENROWSET(BULK...) (SQL Server) .

  • При использовании параметра OPENROWSET BULK с инструкцией INSERT предложение BULK поддерживает табличные указания.When the OPENROWSET BULK option is used with an INSERT statement, the BULK clause supports table hints. Кроме обычных табличных указаний, таких как TABLOCK, предложение BULK принимает следующие специальные табличные указания: IGNORE_CONSTRAINTS (пропускает только ограничения CHECK и FOREIGN KEY), IGNORE_TRIGGERS, KEEPDEFAULTS и KEEPIDENTITY.In addition to the regular table hints, such as TABLOCK, the BULK clause can accept the following specialized table hints: IGNORE_CONSTRAINTS (ignores only the CHECK and FOREIGN KEY constraints), IGNORE_TRIGGERS, KEEPDEFAULTS, and KEEPIDENTITY. Дополнительные сведения см. в разделе Табличные указания (Transact-SQL).For more information, see Table Hints (Transact-SQL).

Сведения об использовании инструкций INSERT...SELECT * FROM OPENROWSET(BULK...) см. в статье Массовый импорт и экспорт данных (SQL Server).For information about how to use INSERT...SELECT * FROM OPENROWSET(BULK...) statements, see Bulk Import and Export of Data (SQL Server). Сведения о том, когда в журнале транзакций регистрируются операции вставки строк, выполняемые при массовом импорте, см. в разделе Предварительные условия для минимального протоколирования массового импорта данных.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.

Примечание

При использовании функции OPENROWSET важно понимать, как SQL ServerSQL Server обрабатывает олицетворение.When you use OPENROWSET, it is important to understand how SQL ServerSQL Server handles impersonation. Сведения о вопросах безопасности см. в статье Массовый импорт данных при помощи инструкции BULK INSERT или OPENROWSET(BULK...) (SQL Server).For information about security considerations, see Import Bulk Data by Using BULK INSERT or OPENROWSET(BULK...) (SQL Server).

Массовый импорт данных SQLCHAR, SQLNCHAR или SQLBINARYBulk Importing SQLCHAR, SQLNCHAR or SQLBINARY Data

Функция OPENROWSET(BULK...) предполагает, что максимальная длина данных SQLCHAR, SQLNCHAR или SQLBINARY не превышает 8 000 байт (если не указано иное).OPENROWSET(BULK...) assumes that, if not specified, the maximum length of SQLCHAR, SQLNCHAR or SQLBINARY data does not exceed 8000 bytes. Если импортируемые данные находятся в поле данных LOB, которое содержит любые объекты varchar(max), nvarchar(max) или varbinary(max), превышающие 8000 байт, необходимо использовать XML-файл форматирования, определяющий максимальную длину для поля данных.If the data being imported is in a LOB data field that contains any varchar(max), nvarchar(max), or varbinary(max) objects that exceed 8000 bytes, you must use an XML format file that defines the maximum length for the data field. Чтобы указать максимальную длину, измените файл форматирования и объявите атрибут MAX_LENGTH.To specify the maximum length, edit the format file and declare the MAX_LENGTH attribute.

Примечание

Автоматически сформированный файл форматирования не задает длину или максимальную длину для поля LOB.An automatically generated format file does not specify the length or maximum length for a LOB field. Однако можно изменить файл форматирования и указать длину или максимальную длину вручную.However, you can edit a format file and specify the length or maximum length manually.

Массовый экспорт или импорт документов SQLXMLBulk 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 или SQLVARYCHARSQLCHAR or SQLVARYCHAR Данные отправляются в кодовой странице клиента или кодовой странице, определенной параметрами сортировки.The data is sent in the client code page or in the code page implied by the collation).
SQLNCHAR или SQLNVARCHARSQLNCHAR or SQLNVARCHAR Данные отправляются в Юникоде.The data is sent as Unicode.
SQLBINARY или SQLVARYBINSQLBINARY or SQLVARYBIN Данные отправляются без преобразования.The data is sent without any conversion.

РазрешенияPermissions

Разрешения функции OPENROWSET определяются разрешениями имени пользователя, передаваемого поставщику OLE DB.OPENROWSET permissions are determined by the permissions of the user name that is being passed to the OLE DB provider. Для использования параметра BULK требуется разрешение ADMINISTER BULK OPERATIONS.To use the BULK option requires ADMINISTER BULK OPERATIONS permission.

ПримерыExamples

A.A. Использование функции OPENROWSET с инструкцией SELECT и поставщиком OLE DB для собственного клиента SQL ServerUsing OPENROWSET with SELECT and the SQL Server Native Client OLE DB Provider

В приведенном ниже примере для доступа к таблице HumanResources.Department в базе данных AdventureWorks2012AdventureWorks2012 на удаленном сервере Seattle1 используется поставщик OLE DB для собственного клиента SQL ServerSQL Server.The following example uses the SQL ServerSQL Server Native Client OLE DB provider to access the HumanResources.Department table in the AdventureWorks2012AdventureWorks2012 database on the remote server Seattle1. (При использовании SQLNCLI SQL ServerSQL Server будет использовать последнюю версию поставщика OLE DB для собственного клиента SQL ServerSQL Server.) Инструкция SELECT используется для определения возвращаемого набора строк.(Use SQLNCLI and SQL ServerSQL Server will redirect to the latest version of SQL ServerSQL Server Native Client OLE DB Provider.) A SELECT statement is used to define the row set returned. Строка поставщика содержит ключевые слова Server и Trusted_Connection.The provider string contains the Server and Trusted_Connection keywords. Эти ключевые слова распознаются поставщиком OLE DB для собственного клиента SQL ServerSQL Server.These keywords are recognized by the SQL ServerSQL Server Native Client OLE DB provider.

SELECT a.*  
FROM OPENROWSET('SQLNCLI', 'Server=Seattle1;Trusted_Connection=yes;',  
     'SELECT GroupName, Name, DepartmentID  
      FROM AdventureWorks2012.HumanResources.Department  
      ORDER BY GroupName, Name') AS a;  

Б.B. Использование поставщика Microsoft OLE DB для JetUsing the Microsoft OLE DB Provider for Jet

В приведенном ниже примере для доступа к таблице Customers в базе данных Northwind MicrosoftMicrosoft Access используется поставщик OLE DB для Jet (MicrosoftMicrosoft).The following example accesses the Customers table in the MicrosoftMicrosoft Access Northwind database through the MicrosoftMicrosoft OLE DB Provider for Jet.

Примечание

В этом примере предполагается, что Access установлен.This example assumes that Access is installed. Для запуска данного примера необходимо установить базу данных Northwind.To run this example, you must install the Northwind database.

SELECT CustomerID, CompanyName  
   FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',  
      'C:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Northwind.mdb';  
      'admin';'',Customers);  
GO  

Важно!

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

В.C. Использование функции OPENROWSET и другой таблицы в предложении INNER JOINUsing OPENROWSET and another table in an INNER JOIN

В приведенном ниже примере производится выборка всех данных из таблицы Customers в локальном экземпляре базы данных SQL ServerSQL Server Northwind и из таблицы Orders в базе данных Access Northwind, хранящейся на том же компьютере.The following example selects all data from the Customers table from the local instance of SQL ServerSQL Server Northwind database and from the Orders table from the Access Northwind database stored on the same computer.

Примечание

В этом примере предполагается, что Access установлен.This example assumes that Access is installed. Для запуска данного примера необходимо установить базу данных Northwind.To run this example, you must install the Northwind database.

USE Northwind  ;  
GO  
SELECT c.*, o.*  
FROM Northwind.dbo.Customers AS c   
   INNER JOIN OPENROWSET('Microsoft.Jet.OLEDB.4.0',   
   'C:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Northwind.mdb';'admin';'', Orders)      
   AS o   
   ON c.CustomerID = o.CustomerID ;  
GO  

Важно!

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

Г.D. Использование функции OPENROWSET для массовой вставки данных из файла в столбец типа varbinary(max)Using OPENROWSET to bulk insert file data into a varbinary(max) column

В следующем примере создается небольшая таблица для демонстрационных целей и вставляются данные из файла с именем Text1.txt, расположенного в корневом каталоге диска C:, в столбец varbinary(max).The following example creates a small table for demonstration purposes, and inserts file data from a file named Text1.txt located in the C: root directory into a varbinary(max) column.

USE AdventureWorks2012;  
GO  
CREATE TABLE myTable(FileName nvarchar(60),   
  FileType nvarchar(60), Document varbinary(max));  
GO  
  
INSERT INTO myTable(FileName, FileType, Document)   
   SELECT 'Text1.txt' AS FileName,   
      '.txt' AS FileType,   
      * FROM OPENROWSET(BULK N'C:\Text1.txt', SINGLE_BLOB) AS Document;  
GO  

Важно!

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

Д.E. Использование поставщика OPENROWSET BULK с файлом форматирования для получения строк из текстового файлаUsing the OPENROWSET BULK provider with a format file to retrieve rows from a text file

В следующем примере используется файл форматирования для получения строк, разделенных символами табуляции, из файла values.txt, который содержит следующие данные:The following example uses a format file to retrieve rows from a tab-delimited text file, values.txt that contains the following data:

1     Data Item 1  
2     Data Item 2  
3     Data Item 3  

Файл форматирования values.fmt описывает столбцы в файле values.txt:The format file, values.fmt, describes the columns in values.txt:

9.0  
2  
1  SQLCHAR  0  10 "\t"        1  ID                SQL_Latin1_General_Cp437_BIN  
2  SQLCHAR  0  40 "\r\n"      2  Description        SQL_Latin1_General_Cp437_BIN  

Это запрос, который возвращает данные:This is the query that retrieves that data:

SELECT a.* FROM OPENROWSET( BULK 'c:\test\values.txt',   
   FORMATFILE = 'c:\test\values.fmt') AS a;  

Важно!

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

Е.F. Указание файла форматирования и кодовой страницыSpecifying a format file and code page

В приведенном ниже примере показано, как одновременно использовать параметры файла форматирования и кодовой страницы.The following example show how to use both the format file and code page options at the same time.

INSERT INTO MyTable SELECT a.* FROM  
OPENROWSET (BULK N'D:\data.csv', FORMATFILE =   
    'D:\format_no_collation.txt', CODEPAGE = '65001') AS a;  

Ж.G. Доступ к данным из CSV-файла с помощью файла форматированияAccessing data from a CSV file with a format file

Применимо к: 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.

SELECT *
FROM OPENROWSET(BULK N'D:\XChange\test-csv.csv',
    FORMATFILE = N'D:\XChange\test-csv.fmt', 
    FIRSTROW=2, 
    FORMAT='CSV') AS cars;  

Важно!

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

З.H. Доступ к данным из CSV-файла без использования файла форматированияAccessing data from a CSV file without a format file

SELECT * FROM OPENROWSET(
   BULK 'C:\Program Files\Microsoft SQL Server\MSSQL14.CTP1_1\MSSQL\DATA\inv-2017-01-19.csv',
   SINGLE_CLOB) AS DATA;

Важно!

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

И.I. Доступ к данным из файла, который находится в хранилище BLOB-объектов AzureAccessing data from a file stored on Azure Blob storage

Применимо к: 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 и учетные данные уровня базы данных, созданные для подписанного URL-адреса.The following example uses an external data source that points to a container in an Azure storage account and a database scoped credential created for a shared access signature.

SELECT * FROM OPENROWSET(
   BULK  'inv-2017-01-19.csv',
   DATA_SOURCE = 'MyAzureInvoices',
   SINGLE_CLOB) AS DataFile;

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

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

Дополнительные примеры использования инструкции INSERT...SELECT * FROM OPENROWSET(BULK...) см. в следующих статьях:For additional examples that show using INSERT...SELECT * FROM OPENROWSET(BULK...), see the following topics:

См. также:See Also

DELETE (Transact-SQL) DELETE (Transact-SQL)
FROM (Transact-SQL) FROM (Transact-SQL)
Массовый импорт и экспорт данных (SQL Server) Bulk Import and Export of Data (SQL Server)
INSERT (Transact-SQL) INSERT (Transact-SQL)
OPENDATASOURCE (Transact-SQL) OPENDATASOURCE (Transact-SQL)
OPENQUERY (Transact-SQL) OPENQUERY (Transact-SQL)
Функции наборов строк (Transact-SQL) Rowset Functions (Transact-SQL)
SELECT (Transact-SQL) SELECT (Transact-SQL)
sp_addlinkedserver (Transact-SQL) sp_addlinkedserver (Transact-SQL)
sp_serveroption (Transact-SQL) sp_serveroption (Transact-SQL)
UPDATE (Transact-SQL) UPDATE (Transact-SQL)
WHERE (Transact-SQL)WHERE (Transact-SQL)