[翻译]使用OPENROWSET函数

Q:我想要在一个即席查询(ad hoc query)中从一个远程的OLEDB数据源或使用批量载入(BULK LOAD)的方式将数据导入到SQL Server表内?

A:
您可以使用Transact-SQL中的OPENROWSET函数来获取从任何支持注册OLEDB的提供程序(registered OLD DB provider)的数据源获取数据,诸如远程SQL Server实例或Microsoft Access。如果您使用OPENROWSET来从一个SQL Server实例获取数据,那么该实例必须被配置为允许即席分布式查询。

要将实例配置为支持即席查询,需要使用sp_configure系统存储过程来进行如下设置:

EXEC sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
EXEC sp_configure 'Ad Hoc Distributed Queries', 1
GO
RECONFIGURE;
GO

一旦您已经配置了远程SQL Server实例,您可以使用OPENROWSET函数来查询该实例。该函数应该被包含在SELECT语句的FROM语法中。如下的语法显示了该函数的基本元素:

OPENROWSET('provider', 'connection string', target)

该范例说明了如何使用OPENROWSET函数进行查询:

SELECT Employees.*
FROM OPENROWSET(
'SQLNCLI',
'Server=SqlSrv1;Trusted_Connection=yes',
'SELECT EmployeeID, FirstName, LastName, JobTitle
FROM AdventureWorks.HumanResources.vEmployee
ORDER BY LastName, FirstName'
) AS Employees

如之前所提到的,您可以从SQL Server以外的数据源获取数据。例如,如下的SELECT语句查询了Microsoft Access数据库中的Employees表:

SELECT Employees.*
FROM OPENROWSET(
'Microsoft.Jet.OLEDB.4.0',
'C:\Data\Employees.mdb';'admin';' ',
'SELECT EmployeeID, FirstName, LastName, JobTitle
FROM Employees
ORDER BY LastName, FirstName'
) AS Employees

现在让我们来看一下OPENROWSET函数的其他重要功能--批量载入(Bulk Load)。为了说明其工作原理,我使用了如下的代码来创建和将Employees表导入Adventureworks数据库:

USE AdventureWorks
GO
UPDATE Employees
SET ResumeFile = (
SELECT *
FROM OPENROWSET(BULK 'C:\Data\Employee1.docx', SINGLE_BLOB)
AS ResumeContent)
WHERE EmployeeID = 1

关于该函数的更多详情,请参考SQL Server联机丛书的"OPENROWSET (Transact-SQL)"主体。

原文地址:https://www.cnblogs.com/galaxyyao/p/1452320.html