Aracılığıyla paylaş


OPENROWSET (Transact-SQL)

Şunlar için geçerlidir: SQL Server 2016 (13.x) ve sonraki sürümleri

OPENROWSET bağlı bir sunucudaki tablolara erişmeye alternatiftir ve uzak verilere bağlanmak ve bunlara erişmek için tek seferlik geçici bir yöntemdir. OPENROWSET T-SQL komutu, dış veri kaynağından uzak verilere erişmek için gereken tüm bağlantı bilgilerini içerir.

OPENROWSET işlevine sorgunun FROM yan tümcesinde tablo adıymış gibi başvurulabilir. İşleve OPENROWSET , veri sağlayıcısının özelliklerine bağlı olarak bir INSERT, UPDATEveya DELETE deyiminin hedef tablosu olarak da başvurulabilir. Sorgu birden çok sonuç kümesi döndürebileceğinden OPENROWSET yalnızca ilkini döndürür.

Tip

Dış veri kaynaklarına daha sık başvurular için bunun yerine bağlı sunucuları kullanın. Daha fazla bilgi için bkz. Bağlı Sunucular (Veritabanı Altyapısı).

OPENROWSET BULK işleci olmadan yalnızca SQL Server'da kullanılabilir. Diğer platformlardaki benzer örneklerin ayrıntıları ve bağlantıları:

Transact-SQL söz dizimi kuralları

Syntax

dış veri kaynaklarını sorgulamak için OPENROWSET söz dizimi kullanılır:

OPENROWSET
(  'provider_name'
    , { 'datasource' ; 'user_id' ; 'password' | 'provider_string' }
    , {  [ catalog. ] [ schema. ] object | 'query' }
)

Arguments

'provider_name'

Kayıt defterinde belirtildiği gibi veri sağlayıcısının kolay adını (veya PROGID) temsil eden karakter dizesi. provider_name varsayılan değeri yoktur. Sağlayıcı adı örnekleri MSOLEDBSQL, Microsoft.Jet.OLEDB.4.0veya MSDASQL.

'datasource'

Belirli bir veri kaynağına karşılık gelen dize sabiti. veri kaynağı, sağlayıcıyı başlatmak için sağlayıcının DBPROP_INIT_DATASOURCE arabirimine geçirilecek IDBProperties özelliğidir. Bu dize genellikle veritabanı dosyasının adını, veritabanı sunucusunun adını veya sağlayıcının veritabanını veya veritabanlarını bulmak için anladığı bir adı içerir.

Veri kaynağı, C:\SAMPLES\Northwind.mdb' sağlayıcısı için dosya yolu Microsoft.Jet.OLEDB.4.0 veya Server=Seattle1;Trusted_Connection=yes; sağlayıcı için bağlantı dizesi MSOLEDBSQL olabilir.

'user_id'

Belirtilen veri sağlayıcısına geçirilen kullanıcı adı olan dize sabiti. user_id bağlantının güvenlik bağlamını belirtir ve sağlayıcıyı başlatmak için DBPROP_AUTH_USERID özelliği olarak geçirilir. user_id Microsoft Windows oturum açma adı olamaz.

'password'

Veri sağlayıcısına geçirilecek kullanıcı parolası olan dize sabiti. parola, sağlayıcı başlatılırken DBPROP_AUTH_PASSWORD özelliği olarak geçirilir. parola Microsoft Windows parolası olamaz. Örneğin:

SELECT a.* FROM OPENROWSET(
    'Microsoft.Jet.OLEDB.4.0',
    'C:\SAMPLES\Northwind.mdb';
    '<user name>';
    '<password>',
    Customers
) AS a;

'provider_string'

OLE DB sağlayıcısını başlatmak için DBPROP_INIT_PROVIDERSTRING özelliği olarak geçirilen sağlayıcıya özgü bağlantı dizesi. provider_string genellikle sağlayıcıyı başlatmak için gereken tüm bağlantı bilgilerini kapsüller.

SQL Server Yerel İstemci OLE DB sağlayıcısının tanıdığı anahtar sözcüklerin listesi için bkz. Başlatma ve Yetkilendirme Özellikleri (Yerel İstemci OLE DB Sağlayıcısı). SQL Server Native Client (genellikle kısaltılmış SNAC) SQL Server 2022 (16.x) ve SQL Server Management Studio 19'dan (SSMS) kaldırılmıştır. Hem SQL Server Yerel İstemci OLE DB sağlayıcısı (SQLNCLI veya SQLNCLI11) hem de SQL Server için eski Microsoft OLE DB Sağlayıcısı (SQLOLEDB) yeni geliştirme için önerilmez. İleride SQL Server için yeni Microsoft OLE DB Sürücüsüne (MSOLEDBSQL) geçin.

SELECT d.* FROM OPENROWSET(
    'MSOLEDBSQL',
    'Server=Seattle1;Trusted_Connection=yes;',
    Department
) AS d;

[ katalog. ] [ şema. ] nesne

OPENROWSET okuması gereken verileri içeren uzak tablo veya görünüm. Aşağıdaki bileşenlere sahip üç parçalı ad nesnesi olabilir:

  • katalog (isteğe bağlı) - belirtilen nesnenin bulunduğu kataloğun veya veritabanının adı.
  • şema (isteğe bağlı) - belirtilen nesne için şemanın veya nesne sahibinin adı.
  • nesne: Çalışacak nesneyi benzersiz olarak tanımlayan nesne adı.
SELECT d.* FROM OPENROWSET(
    'MSOLEDBSQL',
    'Server=Seattle1;Trusted_Connection=yes;',
    AdventureWorks2022.HumanResources.Department
) AS d;

'query'

Sağlayıcı tarafından gönderilen ve yürütülen bir dize sabiti. SQL Server'ın yerel örneği bu sorguyu işlemez, ancak doğrudan sorgu olan sağlayıcı tarafından döndürülen sorgu sonuçlarını işler. Doğrudan sorgular tablosal verilerini tablo adları aracılığıyla değil, yalnızca bir komut dili aracılığıyla kullanıma hazır hale getiren sağlayıcılarda kullanıldığında kullanışlıdır. Sorgu sağlayıcısı OLE DB Command nesnesini ve zorunlu arabirimlerini desteklediği sürece doğrudan sorgular uzak sunucuda desteklenir.

Daha fazla bilgi için bkz. SQL Server Yerel İstemcisi (OLE DB) Arabirimleri.

SELECT a.*
FROM OPENROWSET(
    'MSOLEDBSQL',
    'Server=Seattle1;Trusted_Connection=yes;',
    'SELECT TOP 10 GroupName, Name FROM AdventureWorks2022.HumanResources.Department'
) AS a;

Remarks

OPENROWSET ole db veri kaynaklarından uzak verilere erişmek için yalnızca belirtilen sağlayıcı için DisallowAdhocAccess kayıt defteri seçeneği açıkça 0 olarak ayarlandığında ve Geçici Dağıtılmış Sorgular gelişmiş yapılandırma seçeneği etkinleştirildiğinde kullanılabilir. Bu seçenekler ayarlanmamışsa, varsayılan davranış geçici erişime izin vermez.

Uzak OLE DB veri kaynaklarına eriştiğiniz zaman, güvenilen bağlantıların oturum açma kimliği, istemcinin sorgulanan sunucuya bağlı olduğu sunucudan otomatik olarak temsilci seçmez. Kimlik doğrulaması temsilcisinin yapılandırılması gerekir.

Veri sağlayıcısı belirtilen veri kaynağında birden çok kataloğu ve şemayı destekliyorsa katalog ve şema adları gereklidir. veri sağlayıcısı bunları desteklemediğinde ve catalog değerleri schema atlanabilir. Sağlayıcı yalnızca şema adlarını destekliyorsa formun schema.object iki bölümden oluşan bir adı belirtilmelidir. Sağlayıcı yalnızca katalog adlarını destekliyorsa formun catalog.schema.object üç bölümden oluşan bir adı belirtilmelidir. Daha fazla bilgi için bkz.Transact-SQL söz dizimi kuralları.

SQL Server Yerel İstemci OLE DB sağlayıcısını kullanan doğrudan sorgular için üç bölümlü adlar gereklidir.

OPENROWSET bağımsız değişkenleri kabul etmez.

OPENDATASOURCE yan tümcesindeki OPENQUERY, OPENROWSETveya FROM çağrıları, iki çağrıya aynı bağımsız değişkenler sağlansa bile güncelleştirmenin hedefi olarak kullanılan bu işlevlere yapılan çağrılardan ayrı ve bağımsız olarak değerlendirilir. Özellikle, bu çağrılardan birinin sonucuna uygulanan filtre veya birleştirme koşullarının diğerinin sonuçları üzerinde hiçbir etkisi yoktur.

Permissions

OPENROWSET izinleri, veri sağlayıcısına geçirilen kullanıcı adının izinlerine göre belirlenir.

Limitations

Microsoft Access Veritabanı Altyapısı sürücüsünde desteklenmez.

Examples

Bu bölümde, OPENROWSET'in nasıl kullanılacağını gösteren genel örnekler sağlanmaktadır.

Note

kullanarak INSERT...SELECT * FROM OPENROWSET(BULK...)gösteren örnekler için bkz. OPENROWSET BULK (Transact-SQL).

SQL Server Native Client (genellikle kısaltılmış SNAC) SQL Server 2022 (16.x) ve SQL Server Management Studio 19'dan (SSMS) kaldırılmıştır. Hem SQL Server Yerel İstemci OLE DB sağlayıcısı (SQLNCLI veya SQLNCLI11) hem de SQL Server için eski Microsoft OLE DB Sağlayıcısı (SQLOLEDB) yeni geliştirme için önerilmez. İleride SQL Server için yeni Microsoft OLE DB Sürücüsüne (MSOLEDBSQL) geçin.

A. SELECT ve SQL Server Yerel İstemci OLE DB Sağlayıcısı ile OPENROWSET kullanma

Aşağıdaki örnek, uzak sunucu HumanResources.DepartmentAdventureWorks2025 veritabanındaki Seattle1 tablosuna erişmek için SQL Server Yerel İstemci OLE DB sağlayıcısını kullanır. (yerini MSOLEDBSQLalan modern Microsoft SQL Server OLE DB Veri Sağlayıcısı için kullanınSQLNCLI.) SELECT Döndürülen satır kümesini tanımlamak için bir deyim kullanılır. Sağlayıcı dizesi Server ve Trusted_Connection anahtar sözcüklerini içerir. Bu anahtar sözcükler SQL Server Yerel İstemci OLE DB sağlayıcısı tarafından tanınır.

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

B. Jet için Microsoft OLE DB Sağlayıcısı'nı kullanma

Aşağıdaki örnek, Jet için Microsoft OLE DB Sağlayıcısı aracılığıyla Microsoft Access Customers veritabanındaki Northwind tablosuna erişir.

Note

Bu örnekte, Microsoft Access'in yüklü olduğu varsayılır. Bu örneği çalıştırmak için Northwind veritabanını yüklemeniz gerekir.

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

C. INNER JOIN'te OPENROWSET ve başka bir tablo kullanma

Aşağıdaki örnek, SQL Server Customers veritabanının Northwind yerel örneğinden tablodan ve aynı bilgisayarda depolanan Microsoft Access Orders veritabanındaki Northwind tablodan tüm verileri seçer.

Note

Bu örnekte, Microsoft Access'in yüklü olduğu varsayılır. Bu örneği çalıştırmak için Northwind veritabanını yüklemeniz gerekir.

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;