只有在以下情况下才能使用 OPENROWSET 访问 OLE DB 数据源中的远程数据:指定访问接口的 DisallowAdhocAccess 注册表选项已显式设置为 0,并启用了 Ad Hoc Distributed Queries 高级配置选项。如果未设置这些选项,则默认行为不允许即席访问。
访问远程 OLE DB 数据源时,服务器不会自动委托可信连接的登录标识,客户端通过此登录标识才能连接到正在查询的服务器。必须配置身份验证委托。有关详细信息,请参阅为委托配置链接服务器。
如果 OLE DB 访问接口在指定的数据源中支持多个目录和架构,那么就需要目录及架构名称。如果 OLE DB 访问接口并不支持多个目录和架构,那么可以忽略 catalog 和 schema 的值。如果访问接口只支持架构名称,那么必须指定一个格式为 schema.object 的两部分名称。如果访问接口只支持目录名称,那么必须指定一个格式为 catalog.schema.object 的三部分名称。必须为使用 SQL Server Native Client OLE DB 访问接口的传递查询指定由三部分组成的名称。有关详细信息,请参阅 Transact-SQL 语法约定 (Transact-SQL)。
OPENROWSET 不接受参数变量。
使用带有 BULK 选项的 OPENROWSET
以下 Transact-SQL 增强功能支持 OPENROWSET(BULK...)函数:
-
与 SELECT 一起使用的 FROM 子句可以调用 OPENROWSET(BULK...)而非表名,同时可以实现完整的 SELECT 功能。
带有 BULK 选项的 OPENROWSET 在 FROM 子句中需要有一个相关名称,也称为范围变量或别名。可以指定列别名。如果未指定列别名列表,则格式化文件必须具有列名。指定列别名会覆盖格式化文件中的列名,例如:
FROM OPENROWSET(BULK...) AS table_alias
FROM OPENROWSET(BULK...) AS table_alias(column_alias,...n)
-
SELECT...FROM OPENROWSET(BULK...)语句将直接查询文件中的数据,无需将数据导入表中。SELECT…FROM OPENROWSET(BULK...)语句还可以通过使用格式化文件指定列名和数据类型,从而列出大容量列别名。
-
通过将 OPENROWSET(BULK...)用作 INSERT 或 MERGE 语句中的源表,将数据文件中的数据大容量导入 SQL Server 表中。有关详细信息,请参阅使用 BULK INSERT 或 OPENROWSET(BULK...) 导入大容量数据。
-
OPENROWSET BULK 选项与 INSERT 语句一起使用时,BULK 子句支持表提示。BULK 子句除了接受 TABLOCK 等常规表提示之外,还可以接受下列专用表提示:IGNORE_CONSTRAINTS(仅忽略 CHECK 和 FOREIGN KEY 约束)、IGNORE_TRIGGERS、KEEPDEFAULTS 和 KEEPIDENTITY。有关详细信息,请参阅表提示 (Transact-SQL)。
有关如何使用 INSERT...SELECT * FROM OPENROWSET(BULK...) 语句的信息,请参阅导入和导出大容量数据。有关何时在事务日志中记录由大容量导入执行的行插入操作的信息,请参阅在大容量导入中按最小方式记录日志的前提条件。
大容量导出或导入 SQLXML 文档
若要大容量导出或导入 SQLXML 数据,请在格式化文件中使用下列数据类型之一。
|
数据类型
|
效果
|
|---|
|
SQLCHAR 或 SQLVARYCHAR
|
在客户端代码页或排序规则隐含的代码页中发送数据。
|
|
SQLNCHAR 或 SQLNVARCHAR
|
以 Unicode 格式发送数据。
|
|
SQLBINARY 或 SQLVARYBIN
|
不经任何转换即发送数据。
|