Aracılığıyla paylaş


OPENROWSET (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen Örneği

Bir OLE DB veri kaynağından uzak verilere erişmek için gereken tüm bağlantı bilgilerini içerir. Bu yöntem bağlı bir sunucudaki tablolara erişmeye alternatiftir ve OLE DB kullanarak uzak verilere bağlanmak ve bunlara erişmek için tek seferlik geçici bir yöntemdir. OLE DB 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 işlevine sorgunun FROM yan tümcesinde tablo adıymış gibi başvurulabilir. OPENROWSET işlevine, OLE DB 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.

OPENROWSET, bir dosyadaki verilerin okunmasını ve satır kümesi olarak döndürülmasını sağlayan yerleşik bir BULK sağlayıcısı aracılığıyla toplu işlemleri de destekler.

Bu makaledeki birçok örnek yalnızca SQL Server için geçerlidir. Diğer platformlardaki benzer örneklerin ayrıntıları ve bağlantıları:

Transact-SQL söz dizimi kuralları

Sözdizimi

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' }
)

dış dosyaları okumak için OPENROWSET(BULK) söz dizimi kullanılır:

OPENROWSET( BULK 'data_file' ,
            { FORMATFILE = 'format_file_path' [ <bulk_options> ]
              | SINGLE_BLOB | SINGLE_CLOB | SINGLE_NCLOB }
)

<bulk_options> ::=
   [ , DATASOURCE = 'data_source_name' ]

   -- bulk_options related to input file format
   [ , CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' } ]
   [ , FORMAT = { 'CSV' | 'PARQUET' | 'DELTA' } ]
   [ , FIELDQUOTE = 'quote_characters' ]
   [ , FORMATFILE = 'format_file_path' ]
   [ , FORMATFILE_DATA_SOURCE = 'data_source_name' ]

   [ , FIRSTROW = first_row ]
   [ , LASTROW = last_row ]

   [ , MAXERRORS = maximum_errors ]
   [ , ERRORFILE = 'file_name' ]
   [ , ERRORFILE_DATA_SOURCE = 'data_source_name' ]

   [ , ROWS_PER_BATCH = rows_per_batch ]
   [ , ORDER ( { column [ ASC | DESC ] } [ , ...n ] ) [ UNIQUE ] ]

Bağımsız değişken

Yaygın bağımsız değişkenler

'provider_name'

Kayıt defterinde belirtildiği gibi OLE DB 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 Microsoft.Jet.OLEDB.4.0, SQLNCLIveya MSDASQL.

'veri kaynağı'

Belirli bir OLE DB veri kaynağına karşılık gelen dize sabiti. veri kaynağı, sağlayıcıyı başlatmak için sağlayıcının IDBProperties arabirimine geçirilecek DBPROP_INIT_DATASOURCE ö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ğı, Microsoft.Jet.OLEDB.4.0 sağlayıcısı için dosya yolu C:\SAMPLES\Northwind.mdb' veya SQLNCLI sağlayıcı için bağlantı dizesi Server=Seattle1;Trusted_Connection=yes; olabilir.

'user_id'

Belirtilen OLE DB sağlayıcısına geçirilen kullanıcı adı olan bir 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.

'parola'

OLE DB 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.

SELECT a.* FROM OPENROWSET(
    'Microsoft.Jet.OLEDB.4.0',
    'C:\SAMPLES\Northwind.mdb';
    'admin';
    '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ı).

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

<table_or_view>

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(
    'SQLNCLI',
    'Server=Seattle1;Trusted_Connection=yes;',
    AdventureWorks2022.HumanResources.Department
) AS d;

'sorgu'

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(
    'SQLNCLI',
    'Server=Seattle1;Trusted_Connection=yes;',
    'SELECT TOP 10 GroupName, Name FROM AdventureWorks2022.HumanResources.Department'
) AS a;

BULK bağımsız değişkenleri

OPENROWSET bir dosyadaki verileri okumak için BULK satır kümesi sağlayıcısını kullanır. SQL Server'da OPENROWSET verileri hedef tabloya yüklemeden veri dosyasından okuyabilir. Bu, temel bir SELECT deyimiyle OPENROWSET kullanmanıza olanak tanır.

Önemli

Azure SQL Veritabanı yalnızca Azure Blob Depolama'dan okumayı destekler.

BULK seçeneğinin bağımsız değişkenleri, okuma verilerinin nereden başlatılıp sonlandırıldığı, hatalarla nasıl başa çıkıldığı ve verilerin nasıl yorumlandığı üzerinde önemli bir denetim sağlar. Örneğin, veri dosyasının varbinary, varcharveya nvarchartüründe tek satırlı, tek sütunlu satır kümesi olarak okunacağını belirtebilirsiniz. Varsayılan davranış, izleyen bağımsız değişken açıklamalarında açıklanmıştır.

BULK seçeneğini kullanma hakkında bilgi için bu makalenin devamında yer alan Açıklamalar bölümüne bakın. BULK seçeneğinin gerektirdiği izinler hakkında bilgi için bu makalenin devamındaki İzinler bölümüne bakın.

Not

Verileri tam kurtarma modeliyle içeri aktarmak için kullanıldığında OPENROWSET (BULK ...) günlüğü iyileştirmez.

Verileri toplu içeri aktarma için hazırlama hakkında bilgi için bkz. Verileri toplu dışarı veya içeri aktarma için hazırlama.

BULK 'data_file'

Verileri hedef tabloya kopyalanacak olan veri dosyasının tam yolu.

SELECT * FROM OPENROWSET(
   BULK 'C:\DATA\inv-2017-01-19.csv',
   SINGLE_CLOB
) AS DATA;

SQL Server 2017 (14.x) sürümünden başlayarak data_file Azure Blob Depolama'da olabilir. Örnekler için bkz. Azure Blob Depolamaverilere toplu erişim örnekleri.

Önemli

Azure SQL Veritabanı yalnızca Azure Blob Depolama'dan okumayı destekler.

BULK hata işleme seçenekleri

ERRORFILE = 'file_name'

Biçimlendirme hataları olan ve OLE DB satır kümesine dönüştürülemez satırları toplamak için kullanılan dosyayı belirtir. Bu satırlar, "olduğu gibi" veri dosyasından bu hata dosyasına kopyalanır.

Hata dosyası, komut yürütmenin başlangıcında oluşturulur. Dosya zaten varsa bir hata oluşur. Ayrıca, uzantı .ERROR.txt sahip bir denetim dosyası oluşturulur. Bu dosya, hata dosyasındaki her satıra başvurur ve hata tanılaması sağlar. Hatalar düzeltildikten sonra veriler yüklenebilir.

SQL Server 2017 (14.x) sürümünden başlayarak error_file_path Azure Blob Depolama'da olabilir.

ERRORFILE_DATA_SOURCE_NAME

SQL Server 2017'den (14.x) başlayarak bu bağımsız değişken, içeri aktarma sırasında bulunan hataları içeren hata dosyasının Azure Blob depolama konumunu işaret eden adlandırılmış bir dış veri kaynağıdır. Dış veri kaynağı TYPE = BLOB_STORAGEkullanılarak oluşturulmalıdır. Daha fazla bilgi için bkz. CREATE EXTERNAL DATA SOURCE.

MAXERRORS = maximum_errors

Biçim dosyasında tanımlandığı gibi, OPENROWSET özel durum oluşturmadan önce gerçekleşebilecek en fazla söz dizimi hatası veya uyumsuz satır sayısını belirtir. MAXERRORS ulaşılana kadar, OPENROWSET her bir hatalı satırı yoksayar, yüklemez ve hatalı satırı tek hata olarak sayar.

maximum_errors için varsayılan değer 10'dur.

Not

, kısıtlamaları veya para dönüştürme ve bigint veri türlerini için geçerli değildir.

BULK veri işleme seçenekleri

FIRSTROW = first_row

Yüklenecek ilk satırın sayısını belirtir. Varsayılan değer 1'dir. Bu, belirtilen veri dosyasındaki ilk satırı gösterir. Satır numaraları, satır sonlandırıcıları sayılarak belirlenir. FIRSTROW 1 tabanlıdır.

LASTROW = last_row

Yüklenecek son satırın sayısını belirtir. Varsayılan değer 0'dır. Bu, belirtilen veri dosyasındaki son satırı gösterir.

ROWS_PER_BATCH = rows_per_batch

Veri dosyasındaki yaklaşık veri satır sayısını belirtir. Bu değer, gerçek satır sayısıyla aynı sırada olmalıdır.

OPENROWSET bir veri dosyasını her zaman tek bir toplu iş olarak içeri aktarır. Ancak, > 0 değerine sahip rows_per_batch belirtirseniz, sorgu işlemcisi sorgu planındaki kaynakları ayırmaya yönelik bir ipucu olarak rows_per_batch değerini kullanır.

Varsayılan olarak, ROWS_PER_BATCH bilinmiyor. ROWS_PER_BATCH = 0 belirtmek, ROWS_PER_BATCHatlama ile aynıdır.

ORDER ( { sütun [ ASC | DESC ] } [ ,... n ] [ UNIQUE ] )

Veri dosyasındaki verilerin nasıl sıralanacağını belirten isteğe bağlı bir ipucu. Varsayılan olarak, toplu işlem veri dosyasının sıralı olmadığını varsayar. Sorgu iyileştiricisi daha verimli bir sorgu planı oluşturmak için sıralamadan yararlanabiliyorsa performans iyileştirebilir. Aşağıdaki listede, sıralama belirtmenin yararlı olabileceği örnekler verilmiştir:

  • Satır kümesi verilerinin kümelenmiş dizin anahtarında sıralandığı kümelenmiş dizini olan bir tabloya satır ekleme.
  • Satır kümesini sıralama ve birleştirme sütunlarının eşleştiği başka bir tabloyla birleştirme.
  • Satır kümesi verilerini sıralama sütunlarına göre toplama.
  • Sıralama ve birleştirme sütunlarının eşleştiği sorgunun FROM yan tümcesinde satır kümesini kaynak tablo olarak kullanma.

EŞSİZ

Veri dosyasının yinelenen girdileri olmadığını belirtir.

Veri dosyasındaki gerçek satırlar belirtilen düzene göre sıralanmamışsa veya UNIQUE ipucu belirtilirse ve yinelenen anahtarlar varsa bir hata döndürülür.

ORDER kullanıldığında sütun diğer adları gereklidir. Sütun diğer adı listesi, BULK yan tümcesi tarafından erişilen türetilmiş tabloya başvurmalıdır. ORDER yan tümcesinde belirtilen sütun adları bu sütun diğer ad listesine başvurur. Büyük değer türleri (varchar(max), nvarchar(max), varbinary(max)ve xml) ve büyük nesne (LOB) türleri (metin, ntextve resim) sütunları belirtilemiyor.

SINGLE_BLOB

data_file içeriğini,varbinary(max) türünde tek satırlı, tek sütunlu satır kümesi olarak döndürür.

Önemli

XML verilerini SINGLE_CLOB ve SINGLE_NCLOByerine yalnızca SINGLE_BLOB seçeneğini kullanarak içeri aktarmanızı öneririz çünkü yalnızca SINGLE_BLOB tüm Windows kodlama dönüştürmelerini destekler.

SINGLE_CLOB

data_file ASCII olarak okuyarak, içeriği geçerli veritabanının harmanlamasını kullanarak varchar(max)türünde tek satırlı, tek sütunlu satır kümesi olarak döndürür.

SINGLE_NCLOB

data_file Unicode olarak okuyarak, içeriği geçerli veritabanının harmanlamasını kullanarak nvarchar(max)türünde tek satırlı, tek sütunlu bir satır kümesi olarak döndürür.

SELECT * FROM OPENROWSET(
    BULK N'C:\Text1.txt',
    SINGLE_NCLOB
) AS Document;

BULK giriş dosyası biçimi seçenekleri

CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' }

Veri dosyasındaki verilerin kod sayfasını belirtir. CODEPAGE yalnızca veriler karakter değerleri 127'den büyük veya 32'den küçük olan karakter, varcharveya metin sütunları içeriyorsa geçerlidir.

Önemli

CODEPAGE, Linux'ta desteklenen bir seçenek değildir.

Not

65001 seçeneğinin harmanlama/kod sayfası belirtimine göre önceliğe sahip olmasını istemeniz dışında, biçim dosyasındaki her sütun için bir harmanlama adı belirtmenizi öneririz.

CODEPAGE değeri Açıklama
ACP char, varcharveya metin veri türünün sütunlarını ANSI/Microsoft Windows kod sayfasından (ISO 1252) SQL Server kod sayfasına dönüştürür.
OEM (varsayılan) char, varcharveya metin veri türünün sütunlarını sistem OEM kodu sayfasından SQL Server kod sayfasına dönüştürür.
RAW Bir kod sayfasından diğerine dönüştürme gerçekleşmez. Bu en hızlı seçenektir.
code_page Veri dosyasındaki karakter verilerinin kodlandığı kaynak kod sayfasını gösterir; örneğin, 850.

SQL Server 2016 (13.x) öncesi Önemli Sürümleri, 65001 (UTF-8 kodlama) kod sayfasını desteklemez.

FORMAT = { 'CSV' | 'PARQUET' | 'DELTA' }

SQL Server 2017(14.x) ile başlayarak bu bağımsız değişken, rfc 4180 standardına uyumlu bir virgülle ayrılmış değerler dosyası belirtir.

SQL Server 2022(16.x) sürümünden itibaren hem Parquet hem de Delta biçimleri desteklenir.

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

FORMATFILE = 'format_file_path'

Biçim dosyasının tam yolunu belirtir. SQL Server iki tür biçim dosyasını destekler: XML ve XML olmayan.

Sonuç kümesinde sütun türlerini tanımlamak için bir biçim dosyası gereklidir. Tek özel durum, SINGLE_CLOB, SINGLE_BLOBveya SINGLE_NCLOB belirtildiği durumlardır; bu durumda, biçim dosyası gerekli değildir.

Biçim dosyaları hakkında bilgi için bkz. Verileri toplu içeri aktarmak için biçim dosyası kullanma (SQL Server).

SQL Server 2017 (14.x) sürümünden başlayarak format_file_path Azure Blob Depolama'da olabilir. Örnekler için bkz. Azure Blob Depolamaverilere toplu erişim örnekleri.

FIELDQUOTE = 'field_quote'

SQL Server 2017 'den (14.x) başlayarak, bu bağımsız değişken CSV dosyasında tırnak karakteri olarak kullanılan bir karakteri belirtir. Belirtilmezse, teklif karakteri (") RFC 4180 standardında tanımlandığı gibi tırnak karakteri olarak kullanılır.

Açıklamalar

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.

OLE DB sağlayıcısı belirtilen veri kaynağında birden çok kataloğu ve şemayı destekliyorsa katalog ve şema adları gereklidir. OLE DB sağlayıcısı bunları desteklemediğinde katalog ve şeması değerleri atlanabilir. Sağlayıcı yalnızca şema adlarını destekliyorsa, formun iki bölümden oluşan bir adı şema .nesne belirtilmelidir. Sağlayıcı yalnızca katalog adlarını destekliyorsa, formun üç bölümden oluşan bir adı katalog. şema.nesne belirtilmelidir. SQL Server Yerel İstemci OLE DB sağlayıcısını kullanan doğrudan sorgular için üç bölümlü adlar belirtilmelidir. Daha fazla bilgi için bkz.Transact-SQL söz dizimi kuralları.

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

FROM yan tümcesindeki OPENDATASOURCE, OPENQUERYveya OPENROWSET ç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.

BULK seçeneğiyle OPENROWSET kullanma

Aşağıdaki Transact-SQL geliştirmeleri OPENROWSET(BULK...) işlevini destekler:

  • SELECT ile kullanılan bir FROM yan tümcesi, tam SELECT işlevselliğiyle tablo adı yerine OPENROWSET(BULK...) çağırabilir.

    BULK seçeneğiyle OPENROWSET, FROM yan tümcesinde aralık değişkeni veya diğer ad olarak da bilinen bir bağıntı adı gerektirir. Sütun diğer adları belirtilebilir. Sütun diğer adı listesi belirtilmezse, biçim dosyasının sütun adları olmalıdır. Sütun diğer adlarının belirtilmesi, biçim dosyasındaki sütun adlarını geçersiz kılar, örneğin:

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

    Önemli

    AS <table_alias> eklenememesi şu hataya neden olur: Msg 491, Düzey 16, Durum 1, Satır 20 From yan tümcesindeki toplu satır kümesi için bağıntı adı belirtilmelidir.

  • SELECT...FROM OPENROWSET(BULK...) deyimi, verileri tabloya aktarmadan doğrudan bir dosyadaki verileri sorgular. SELECT...FROM OPENROWSET(BULK...) deyimleri, sütun adlarını ve veri türlerini belirtmek için bir biçim dosyası kullanarak toplu sütun diğer adlarını da listeleyebilir.

  • INSERT veya MERGE deyiminde kaynak tablo olarak OPENROWSET(BULK...) kullanmak, verileri bir veri dosyasından SQL Server tablosuna toplu olarak içeri aktarır. Daha fazla bilgi için bkz. VERILERI SQL Serveriçeri aktarmak için BULK INSERT veya OPENROWSET(BULK...) kullanma.

  • OPENROWSET BULK seçeneği bir INSERT deyimiyle kullanıldığında, BULK yan tümcesi tablo ipuçlarını destekler. TABLOCKgibi normal tablo ipuçlarına ek olarak, BULK yan tümcesi şu özel tablo ipuçlarını kabul edebilir: IGNORE_CONSTRAINTS (yalnızca CHECK ve FOREIGN KEY kısıtlamalarını yoksayar), IGNORE_TRIGGERS, KEEPDEFAULTSve KEEPIDENTITY. Daha fazla bilgi için bkz. Tablo İpuçları (Transact-SQL).

    INSERT...SELECT * FROM OPENROWSET(BULK...) deyimlerini kullanma hakkında bilgi için bkz. Verileri Toplu İçeri ve Dışarı Aktarma (SQL Server). Toplu içeri aktarma tarafından gerçekleştirilen satır ekleme işlemlerinin işlem günlüğüne ne zaman kaydedildiği hakkında bilgi için bkz. toplu içeri aktarmaminimum günlük kaydı için önkoşullar .

Not

OPENROWSETkullandığınızda, SQL Server'ın kimliğe bürünmeyi nasıl işlediğini anlamak önemlidir. Güvenlikle ilgili dikkat edilmesi gerekenler hakkında bilgi için bkz. VERILERI SQL Serveriçeri aktarmak için BULK INSERT veya OPENROWSET(BULK...) kullanma.

SQLCHAR, SQLNCHAR veya SQLBINARY verilerini toplu içeri aktarma

OPENROWSET(BULK...) belirtilmezse en fazla SQLCHAR, SQLNCHARveya SQLBINARY veri uzunluğunun 8.000 bayt'ı aşmadığını varsayar. İçeri aktarılan veriler, 8.000 bayt'ı aşan nesneler varchar(max), nvarchar(max)veya varbinary(max) içeren bir LOB veri alanındaysa, veri alanı için maksimum uzunluğu tanımlayan bir XML biçim dosyası kullanmanız gerekir. En fazla uzunluğu belirtmek için biçim dosyasını düzenleyin ve MAX_LENGTH özniteliğini bildirin.

Not

Otomatik olarak oluşturulan biçim dosyası, LOB alanı için uzunluk veya uzunluk üst sınırını belirtmez. Ancak, bir biçim dosyasını düzenleyebilir ve uzunluğu veya uzunluk üst sınırını el ile belirtebilirsiniz.

SQLXML belgelerini toplu dışarı veya içeri aktarma

SQLXML verilerini toplu olarak dışarı veya içeri aktarmak için biçim dosyanızda aşağıdaki veri türlerinden birini kullanın.

Veri tipi Etki
SQLCHAR veya SQLVARYCHAR Veriler istemci kodu sayfasında veya harmanlama tarafından ima edilen kod sayfasında gönderilir.
SQLNCHAR veya SQLNVARCHAR Veriler Unicode olarak gönderilir.
SQLBINARY veya SQLVARYBIN Veriler dönüştürme olmadan gönderilir.

İzinler

OPENROWSET izinleri, OLE DB sağlayıcısına geçirilen kullanıcı adının izinlerine göre belirlenir. BULK seçeneğini kullanmak için ADMINISTER BULK OPERATIONS veya ADMINISTER DATABASE BULK OPERATIONS izni gerekir.

Örnekler

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

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

Şunlar için geçerlidir: yalnızca SQL Server'ı.

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şağıdaki örnek, uzak sunucu Seattle1AdventureWorks2022 veritabanındaki HumanResources.Department tablosuna erişmek için SQL Server Yerel İstemci OLE DB sağlayıcısını kullanır. (SQLNCLI kullanın; SQL Server, SQL Server Yerel İstemci OLE DB Sağlayıcısı'nın en son sürümüne yönlendirilir.) Döndürülen satır kümesini tanımlamak için bir SELECT deyimi 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(
    'SQLNCLI', '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

Şunlar için geçerlidir: yalnızca SQL Server'ı.

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

Not

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
);

Önemli

Azure SQL Veritabanı yalnızca Azure Blob Depolama'dan okumayı destekler.

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

Şunlar için geçerlidir: yalnızca SQL Server'ı.

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

Not

Bu örnekte 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;

Önemli

Azure SQL Veritabanı yalnızca Azure Blob Depolama'dan okumayı destekler.

D. OpenROWSET kullanarak dosya verilerini bir varbinary(max) sütununa TOPLU EKLEME

Şunlar için geçerlidir: yalnızca SQL Server'ı.

Aşağıdaki örnek, gösterim amacıyla küçük bir tablo oluşturur ve C: kök dizininde bulunan Text1.txt adlı dosyadan dosya verilerini varbinary(max) sütununa ekler.

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

Önemli

Azure SQL Veritabanı yalnızca Azure Blob Depolama'dan okumayı destekler.

E. Metin dosyasından satır almak için biçim dosyasıyla OPENROWSET BULK sağlayıcısını kullanma

Şunlar için geçerlidir: yalnızca SQL Server'ı.

Aşağıdaki örnek, aşağıdaki verileri içeren values.txt sekmeyle ayrılmış bir metin dosyasından satır almak için bir biçim dosyası kullanır:

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

values.fmtbiçim dosyası, values.txtiçindeki sütunları açıklar:

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

Bu sorgu bu verileri alır:

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

Önemli

Azure SQL Veritabanı yalnızca Azure Blob Depolama'dan okumayı destekler.

F. Biçim dosyası ve kod sayfası belirtme

Şunlar için geçerlidir: yalnızca SQL Server'ı.

Aşağıdaki örnekte hem biçim dosyası hem de kod sayfası seçeneklerinin aynı anda nasıl kullanılacağı gösterilmektedir.

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

G. Biçim dosyasıyla CSV dosyasından verilere erişme

Şunlar için geçerlidir: yalnızca SQL Server 2017 (14.x) ve sonraki sürümleri.

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

Önemli

Azure SQL Veritabanı yalnızca Azure Blob Depolama'dan okumayı destekler.

H. Biçim dosyası olmadan CSV dosyasından verilere erişme

Şunlar için geçerlidir: yalnızca SQL Server'ı.

SELECT * FROM OPENROWSET(
   BULK 'C:\Program Files\Microsoft SQL Server\MSSQL14.CTP1_1\MSSQL\DATA\inv-2017-01-19.csv',
   SINGLE_CLOB
) AS DATA;
SELECT *
FROM OPENROWSET('MSDASQL',
    'Driver={Microsoft Access Text Driver (*.txt, *.csv)}',
    'SELECT * FROM E:\Tlog\TerritoryData.csv'
);

Önemli

ODBC sürücüsü 64 bit olmalıdır. Bunu doğrulamak için Windows'ta bir ODBC Veri Kaynağına Bağlanma (SQL Server İçeri ve Dışarı Aktarma Sihirbazı) uygulamasının Sürücüler sekmesini açın. 64 bit sqlservr.exesürümüyle çalışmayan 32 bit Microsoft Text Driver (*.txt, *.csv) vardır.

Ben. Azure Blob Depolama'da depolanan bir dosyadan verilere erişme

Şunlar için geçerlidir: yalnızca SQL Server 2017 (14.x) ve sonraki sürümleri.

SQL Server 2017 (14.x) ve sonraki sürümlerinde, aşağıdaki örnekte Azure depolama hesabındaki bir kapsayıcıyı işaret eden bir dış veri kaynağı ve paylaşılan erişim imzası için oluşturulan veritabanı kapsamlı kimlik bilgileri kullanılmaktadır.

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

Kimlik bilgilerini ve dış veri kaynağını yapılandırma gibi eksiksiz OPENROWSET örnekleri için bkz. Azure Blob Depolama'nde verilere toplu erişim örnekleri.

J. Azure Blob Depolama'da depolanan bir dosyadan tabloya aktarma

Aşağıdaki örnekte, SAS anahtarını oluşturduğunuz Azure Blob depolama konumundaki bir csv dosyasından veri yüklemek için OPENROWSET komutunun nasıl kullanılacağı gösterilmektedir. Azure Blob depolama konumu bir dış veri kaynağı olarak yapılandırılır. Bu, kullanıcı veritabanında ana anahtar kullanılarak şifrelenen paylaşılan erişim imzası kullanan veritabanı kapsamlı bir kimlik bilgisi gerektirir.

-- Optional: a MASTER KEY is not required if a DATABASE SCOPED CREDENTIAL is not required because the blob is configured for public (anonymous) access!
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'YourStrongPassword1';
GO

-- Optional: a DATABASE SCOPED CREDENTIAL is not required because the blob is configured for public (anonymous) access!
CREATE DATABASE SCOPED CREDENTIAL MyAzureBlobStorageCredential
    WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
    SECRET = '******srt=sco&sp=rwac&se=2017-02-01T00:55:34Z&st=2016-12-29T16:55:34Z***************';

-- Make sure that you don't have a leading ? in the SAS token, and that you
-- have at least read permission on the object that should be loaded srt=o&sp=r,
-- and that expiration period is valid (all dates are in UTC time)
CREATE EXTERNAL DATA SOURCE MyAzureBlobStorage
WITH (
    TYPE = BLOB_STORAGE,
    LOCATION = 'https://****************.blob.core.windows.net/curriculum',
    -- CREDENTIAL is not required if a blob is configured for public (anonymous) access!
    CREDENTIAL = MyAzureBlobStorageCredential
);

INSERT INTO achievements
WITH (TABLOCK) (
    id,
    description
)
SELECT * FROM OPENROWSET(
    BULK 'csv/achievements.csv',
    DATA_SOURCE = 'MyAzureBlobStorage',
    FORMAT = 'CSV',
    FORMATFILE = 'csv/achievements-c.xml',
    FORMATFILE_DATA_SOURCE = 'MyAzureBlobStorage'
) AS DataFile;

Önemli

Azure SQL Veritabanı yalnızca Azure Blob Depolama'dan okumayı destekler.

K. Dış kaynak için yönetilen kimlik kullanma

Şunlar için geçerlidir: Azure SQL Yönetilen Örneği ve Azure SQL Veritabanı

Aşağıdaki örnek, yönetilen kimlik kullanarak bir kimlik bilgisi oluşturur, bir dış kaynak oluşturur ve ardından dış kaynakta barındırılan bir CSV'den veri yükler.

İlk olarak kimlik bilgilerini oluşturun ve dış kaynak olarak blob depolamayı belirtin:

CREATE DATABASE SCOPED CREDENTIAL sampletestcred
WITH IDENTITY = 'MANAGED IDENTITY';

CREATE EXTERNAL DATA SOURCE SampleSource
WITH (
    TYPE = BLOB_STORAGE,
    LOCATION = 'https://****************.blob.core.windows.net/curriculum',
    CREDENTIAL = sampletestcred
);

Ardından blob depolamada barındırılan CSV dosyasından veri yükleyin:

SELECT * FROM OPENROWSET(
    BULK 'Test - Copy.csv',
    DATA_SOURCE = 'SampleSource',
    SINGLE_CLOB
) as test;

Önemli

Azure SQL Veritabanı yalnızca Azure Blob Depolama'dan okumayı destekler.

L. S3 uyumlu nesne depolamayı kullanarak birkaç Parquet dosyasına erişmek için OPENROWSET kullanma

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

Aşağıdaki örnek, tümü S3 uyumlu nesne depolamada depolanan farklı konumdan birkaç Parquet dosyasına erişim kullanır:

CREATE DATABASE SCOPED CREDENTIAL s3_dsc
WITH IDENTITY = 'S3 Access Key',
SECRET = 'contosoadmin:contosopwd';
GO

CREATE EXTERNAL DATA SOURCE s3_eds
WITH
(
    LOCATION = 's3://10.199.40.235:9000/movies',
    CREDENTIAL = s3_dsc
);
GO

SELECT * FROM OPENROWSET(
    BULK (
        '/decades/1950s/*.parquet',
        '/decades/1960s/*.parquet',
        '/decades/1970s/*.parquet'
    ),
    FORMAT = 'PARQUET',
    DATA_SOURCE = 's3_eds'
) AS data;

M. Azure Data Lake 2. Nesil'den çeşitli Delta dosyalarına erişmek için OPENROWSET kullanma

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

Bu örnekte, veri tablosu kapsayıcısı Contosoolarak adlandırılır ve bir Azure Data Lake 2. Nesil depolama hesabında bulunur.

CREATE DATABASE SCOPED CREDENTIAL delta_storage_dsc
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = '<SAS Token>';

CREATE EXTERNAL DATA SOURCE Delta_ED
WITH (
    LOCATION = 'adls://<container>@<storage_account>.dfs.core.windows.net',
    CREDENTIAL = delta_storage_dsc
);

SELECT *
FROM OPENROWSET(
    BULK '/Contoso',
    FORMAT = 'DELTA',
    DATA_SOURCE = 'Delta_ED'
) AS result;

Diğer örnekler

INSERT...SELECT * FROM OPENROWSET(BULK...)kullanmayı gösteren diğer örnekler için aşağıdaki makalelere bakın: