サーバー構成: アドホック分散クエリ

適用対象: SQL Server

既定では、SQL Server では OPENROWSETOPENDATASOURCE を使用したアドホック分散クエリは許可されません。 このオプションを 1 に設定すると、 SQL Server でアドホック アクセスを実行できます。 このオプションを設定しなかった場合または 0 に設定した場合は、 SQL Server でアドホック アクセスを実行できません。

アドホック分散クエリでは、OLE DB を使用するリモート データ ソースに接続するために、OPENROWSET 関数と OPENDATASOURCE 関数が使用されます。 OPENROWSET および OPENDATASOURCE は、アクセス頻度の低い OLE DB データ ソースを参照する目的のみに使用してください。 何度もアクセスするデータ ソースに対しては、リンク サーバーを定義してください。

アドホック名を使用できるようにすると、認証済み SQL Server アカウントであればプロバイダーにアクセスできるようになります。 SQL Server の管理者は、ローカル アカウントからアクセスされても安全なプロバイダーに対してのみ、この機能を有効にしてください。

解説

Ad Hoc Distributed Queries を無効にしてアドホック接続を作成しようとすると、次のエラーが表示されます。

Msg 7415, Level 16, State 1, Line 1

Ad hoc access to OLE DB provider 'Microsoft.ACE.OLEDB.12.0' has been denied. You must access this provider through a linked server.

Azure SQL Database と Azure SQL Managed Instance

機能の比較: Azure SQL Database と Azure SQL Managed Instance」を参照してください。

次の例では、Ad Hoc Distributed Queries を有効にし、OPENROWSET 関数を使用して Seattle1 という名前のサーバーにクエリを実行します。

USE master;
GO

EXECUTE sp_configure 'show advanced options', 1;
GO

RECONFIGURE;
GO

EXECUTE sp_configure 'Ad Hoc Distributed Queries', 1;
GO

RECONFIGURE;
GO

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

EXECUTE sp_configure 'show advanced options', 0;
GO

RECONFIGURE;
GO