Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Microsoft Fabric'te ambar
Veri dosyasını SQL Server'da kullanıcı tarafından belirtilen biçimde bir veritabanı tablosuna veya görünümüne aktarır.
Transact-SQL söz dizimi kuralları
Sözdizimi
BULK INSERT
{ database_name.schema_name.table_or_view_name | schema_name.table_or_view_name | table_or_view_name }
FROM 'data_file'
[ WITH
(
[ [ , ] DATA_SOURCE = 'data_source_name' ]
-- text formatting options
[ [ , ] CODEPAGE = { 'RAW' | 'code_page' | 'ACP' | 'OEM' } ]
[ [ , ] DATAFILETYPE = { 'char' | 'native' | 'widechar' | 'widenative' } ]
[ [ , ] ROWTERMINATOR = 'row_terminator' ]
[ [ , ] FIELDTERMINATOR = 'field_terminator' ]
[ [ , ] FORMAT = 'CSV' ]
[ [ , ] FIELDQUOTE = 'quote_characters']
[ [ , ] FIRSTROW = first_row ]
[ [ , ] LASTROW = last_row ]
-- input file format options
[ [ , ] FORMATFILE = 'format_file_path' ]
[ [ , ] FORMATFILE_DATA_SOURCE = 'data_source_name' ]
-- error handling options
[ [ , ] MAXERRORS = max_errors ]
[ [ , ] ERRORFILE = 'file_name' ]
[ [ , ] ERRORFILE_DATA_SOURCE = 'errorfile_data_source_name' ]
-- database options
[ [ , ] KEEPIDENTITY ]
[ [ , ] KEEPNULLS ]
[ [ , ] FIRE_TRIGGERS ]
[ [ , ] CHECK_CONSTRAINTS ]
[ [ , ] TABLOCK ]
-- source options
[ [ , ] ORDER ( { column [ ASC | DESC ] } [ ,...n ] ) ]
[ [ , ] ROWS_PER_BATCH = rows_per_batch ]
[ [ , ] KILOBYTES_PER_BATCH = kilobytes_per_batch
[ [ , ] BATCHSIZE = batch_size ]
)]
Tartışmalar
deyiminin BULK INSERT
farklı platformlarda farklı bağımsız değişkenleri ve seçenekleri vardır. Farklılıklar aşağıdaki tabloda özetlenir:
Özellik | SQL Server | Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği | Fabric Veri Ambarı |
---|---|---|---|
Veri kaynağı | Yerel yol, Ağ yolu (UNC) veya Azure Depolama | Azure Depolama | Azure Depolama |
Kaynak kimlik doğrulaması | Windows kimlik doğrulaması, SAS | Microsoft Entra Id, SAS belirteci, yönetilen kimlik | Microsoft Entra Kimliği |
Desteklenmeyen seçenekler |
* yoldaki joker karakterler |
* yoldaki joker karakterler |
DATA_SOURCE , FORMATFILE_DATA_SOURCE , ERRORFILE , ERRORFILE_DATA_SOURCE |
Etkin seçenekler ancak etkin değil |
KEEPIDENTITY , FIRE_TRIGGERS , CHECK_CONSTRAINTS , TABLOCK , , ORDER , ROWS_PER_BATCH , , KILOBYTES_PER_BATCH ve BATCHSIZE geçerli değildir. Söz dizimi hatası oluşturmaz, ancak herhangi bir etkisi olmaz |
database_name
Belirtilen tablo veya görünümün bulunduğu veritabanı adı. Belirtilmezse geçerli veritabanı database_name .
schema_name
Tablo veya görünüm şemasının adını belirtir. schema_name , toplu içeri aktarma işlemini gerçekleştiren kullanıcının varsayılan şeması belirtilen tablo veya görünümün şemasıysa isteğe bağlıdır. Şema belirtilmezse ve toplu içeri aktarma işlemini gerçekleştiren kullanıcının varsayılan şeması belirtilen tablo veya görünümden farklıysa, SQL Server bir hata iletisi döndürür ve toplu içeri aktarma işlemi iptal edilir.
table_name
Verileri toplu olarak içeri aktaracak tablonun veya görünümün adını belirtir. Yalnızca tüm sütunların aynı temel tabloya başvuracağı görünümler kullanılabilir. Görünümlere veri yükleme kısıtlamaları hakkında daha fazla bilgi için bkz. INSERT (Transact-SQL).
'data_file' SITESINDEN
Belirtilen tabloya veya görünüme aktaracak verileri içeren veri dosyasının tam yolunu belirtir. BULK INSERT bir diskten veya Azure Blob Depolama'dan (ağ, disket, sabit disk vb.) verileri içeri aktarabilir.
BULK INSERT bing_covid_19_data
FROM 'C:\\bing_covid-19_data\public\curated\covid-19\latest\bing_covid-19_data.csv';
data_file , SQL Server'ın çalıştığı sunucudan geçerli bir yol belirtmelidir.
data_file uzak bir dosyaysa Evrensel Adlandırma Kuralı (UNC) adını belirtin. UNC adı biçimindedir \\SystemName\ShareName\Path\FileName
. Örneğin:
BULK INSERT bing_covid_19_data
FROM '\\ShareX\bing_covid-19_data\public\curated\covid-19\latest\bing_covid-19_data.csv';
Azure SQL Veritabanı ve Doku Ambarı yalnızca Azure Blob Depolama'dan okumayı destekler.
SQL Server 2017 (14.x) sürümünden başlayarak data_file Azure Blob Depolama'da olabilir. Bu durumda seçeneği de belirtmeniz data_source_name
gerekir. Örnek için bkz. Azure Blob Depolama'da bir dosyadan veri içeri aktarma.
Doku Ambarı, kaynak yolu belirtmek için iki farklı yol stilini destekler:
https://<storage account>.blob.core.windows.net/<container name>/<path to file>
abfss://<container name>@<storage account>.dfs.core.windows.net/<path to file>
Doku Ambarı, URI'deki herhangi bir karakterle eşleşebilen joker karakterleri destekler *
ve içeri aktarılacak dosyalar için bir URI deseni tanımlamanızı sağlar. Örneğin:
BULK INSERT bing_covid_19_data
FROM 'https://<data-lake>.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/*.csv';
Uyarı
değerini uygun bir URL ile değiştirin <data-lake>.blob.core.windows.net
.
BATCHSIZE = batch_size
Toplu iş içindeki satır sayısını belirtir. Her toplu işlem tek bir işlem olarak sunucuya kopyalanır. Bu başarısız olursa, SQL Server her toplu işlem için işlemi işler veya geri alır. Varsayılan olarak, belirtilen veri dosyasındaki tüm veriler tek bir toplu işlemdir. Performansla ilgili önemli noktalar hakkında bilgi için bu makalenin devamında yer alan Performansla ilgili dikkat edilmesi gerekenler bölümüne bakın.
KISITLAMALARI_KONTROL_ET
Toplu içeri aktarma işlemi sırasında hedef tablo veya görünümdeki tüm kısıtlamaların denetlenebilmesi gerektiğini belirtir. CHECK_CONSTRAINTS seçeneği olmadan, tüm CHECK ve FOREIGN KEY kısıtlamaları yoksayılır ve işlemden sonra tablodaki kısıtlama güvenilir değil olarak işaretlenir.
BENZERSİz ve BİRİnCİl ANAHTAR kısıtlamaları her zaman uygulanır. NOT NULL kısıtlamasıyla tanımlanan bir karakter sütununa içeri aktarılırken, METIN dosyasında değer olmadığında BULK INSERT boş bir dize ekler.
Bir noktada, tablonun tamamında kısıtlamaları incelemeniz gerekir. Tablo toplu içeri aktarma işleminden önce boş değilse, kısıtlamayı yeniden doğrulamanın maliyeti artımlı verilere CHECK kısıtlamaları uygulama maliyetini aşabilir.
Giriş verilerinin kısıtlamaları ihlal eden satırlar içermesi durumunda kısıtlamaların devre dışı bırakılmasını isteyebileceğiniz bir durumdur (varsayılan davranış). CHECK kısıtlamaları devre dışı bırakıldıktan sonra verileri içeri aktarabilir ve geçersiz verileri kaldırmak için Transact-SQL deyimlerini kullanabilirsiniz.
Uyarı
MAXERRORS seçeneği kısıtlama denetimi için geçerli değildir.
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 karakter değerlerine sahip karakter, varchar veya metin sütunları içeriyorsa geçerlidir. Örnek için bkz. Kod sayfası belirtme.
BULK INSERT bing_covid_19_data
FROM 'https://<data-lake>.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv'
WITH (CODEPAGE = '65001', FIRSTROW=2);
Uyarı
değerini uygun bir URL ile değiştirin <data-lake>.blob.core.windows.net
.
CODEPAGE, SQL Server 2017 (14.x) için Linux'ta desteklenen bir seçenek değildir. SQL Server 2019 (15.x) için CODEPAGE için yalnızca 'RAW' seçeneğine izin verilir.
Biçim dosyasındaki her sütun için bir harmanlama adı belirtmelisiniz.
CODEPAGE değeri | Açıklama |
---|---|
ACP | Char, varchar veya metin veri türü sütunları ANSI/Microsoft Windows kod sayfasından (ISO 1252) SQL Server kod sayfasına dönüştürülür. |
OEM (varsayılan) | Char, varchar veya metin veri türü sütunları sistem OEM kod sayfasından SQL Server kod sayfasına dönüştürülür. |
ÇİĞ | Bir kod sayfasından diğerine dönüştürme gerçekleşmez. RAW en hızlı seçenektir. |
code_page | Belirli bir kod sayfası numarası, örneğin 850. SQL Server 2016 (13.x) öncesi sürümler, 65001 (UTF-8 kodlama) kod sayfasını desteklemez. |
VERİ DOSYASI TÜRÜ = { 'karakter' | 'yerli' | 'Geniş Karakter' | 'geniş yerli' }
BULK INSERT'in belirtilen veri dosyası türü değerini kullanarak içeri aktarma işlemini gerçekleştirdiğini belirtir.
BULK INSERT bing_covid_19_data
FROM 'https://<data-lake>.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv'
WITH (DATAFILETYPE = 'char', FIRSTROW=2);
Uyarı
değerini uygun bir URL ile değiştirin <data-lake>.blob.core.windows.net
.
DATAFILETYPE değeri | Temsil edilen tüm veriler: |
---|---|
char (varsayılan) | Karakter biçimi. Daha fazla bilgi için bkz. Verileri İçeri veya Dışarı Aktarmak için Karakter Biçimini Kullanma (SQL Server). |
yerli | Yerel (veritabanı) veri türleri.
bcp yardımcı programını kullanarak SQL Server'dan verileri toplu olarak içeri aktararak yerel veri dosyasını oluşturun. Yerel değer, karakter değerine daha yüksek bir performans alternatifi sunar. Genişletilmiş/çift baytlık karakter kümesi (DBCS) karakterleri içermeyen bir veri dosyası kullanarak sql Server'ın birden çok örneği arasında verileri toplu olarak aktardığınızda yerel biçim önerilir. Daha fazla bilgi için bkz. Verileri İçeri veya Dışarı Aktarmak için Yerel Biçimi Kullanma (SQL Server). |
widechar | Unicode karakterler. Daha fazla bilgi için bkz. Verileri İçeri veya Dışarı Aktarmak için Unicode Karakter Biçimi Kullanma (SQL Server). |
genişleyici | Verilerin Unicode olarak depolandığı char, varchar ve metin sütunları dışında yerel (veritabanı) veri türleri.
bcp yardımcı programını kullanarak VERILERI SQL Server'dan toplu olarak içeri aktararak geniş veri dosyasını oluşturun. Genişleyici değer,widechar'a daha yüksek performans alternatifi sunar. Veri dosyasında ANSI genişletilmiş karakterleri varsa genişleyiciyi belirtin. Daha fazla bilgi için bkz. Verileri İçeri veya Dışarı Aktarmak için Unicode Yerel Biçimini Kullanma (SQL Server). |
DATA_SOURCE = 'data_source_name'
Şunlar için geçerlidir: SQL Server 2017 (14.x) ve Azure SQL Veritabanı.
İçeri aktarılacak dosyanın Azure Blob Depolama konumuna işaret eden adlandırılmış bir dış veri kaynağı belirtir. Dış veri kaynağı, SQL Server 2017'de (14.x) eklenen seçenek kullanılarak TYPE = BLOB_STORAGE
oluşturulmalıdır. Daha fazla bilgi için bkz. CREATE EXTERNAL DATA SOURCE. Örnek için bkz. Azure Blob Depolama'da bir dosyadan veri içeri aktarma.
Uyarı
değerini uygun bir URL ile değiştirin <data-lake>.blob.core.windows.net
.
CREATE EXTERNAL DATA SOURCE pandemicdatalake
WITH (LOCATION='https://<data-lake>.blob.core.windows.net/public/',TYPE=BLOB_STORAGE)
GO
BULK INSERT bing_covid_19_data
FROM 'curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv'
WITH (DATA_SOURCE='<data-lake>',FIRSTROW = 2,LASTROW = 100,FIELDTERMINATOR = ',');
ERRORFILE = 'error_file_path'
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.
Komut yürütülürken hata dosyası oluşturulur. Dosya zaten varsa bir hata oluşur. Ayrıca, uzantıya .ERROR.txt
sahip bir denetim dosyası oluşturulur ve bu dosyadaki her satıra başvurur ve hata tanılaması sağlar. Hatalar düzeltildikten hemen 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 = 'errorfile_data_source_name'
Şunlar için geçerlidir: SQL Server 2017 (14.x).
İçeri aktarma sırasında bulunan hataları içerecek hata dosyasının Azure Blob Depolama konumuna işaret eden adlandırılmış bir dış veri kaynağı belirtir. Dış veri kaynağı, SQL Server 2017'de (14.x) eklenen seçenek kullanılarak TYPE = BLOB_STORAGE
oluşturulmalıdır. Daha fazla bilgi için bkz. CREATE EXTERNAL DATA SOURCE.
FIRSTROW = first_row
Yüklenecek ilk satırın sayısını belirtir. Varsayılan değer, belirtilen veri dosyasındaki ilk satırdır. FIRSTROW 1 tabanlıdır.
BULK INSERT bing_covid_19_data
FROM 'https://<data-lake>.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv'
WITH (FIRSTROW=2);
Uyarı
değerini uygun bir URL ile değiştirin <data-lake>.blob.core.windows.net
.
FIRSTROW özniteliği, sütun üst bilgilerini atlamak için tasarlanmamıştır. Üst bilgilerin atlanması BULK INSERT deyimi tarafından desteklenmez. Satırları atlamayı seçerseniz, SQL Server Veritabanı Altyapısı yalnızca alan sonlandırıcılarına bakar ve atlanan satır alanlarındaki verileri doğrulamaz.
TETİKLEYİCİLERİ_ATEŞLE
Hedef tabloda tanımlanan tüm ekleme tetikleyicilerinin toplu içeri aktarma işlemi sırasında yürütüldüğünü belirtir. Tetikleyiciler hedef tablodaki INSERT işlemleri için tanımlanmışsa, tamamlanan her toplu işlem için tetiklenir.
FIRE_TRIGGERS belirtilmezse, hiçbir ekleme tetikleyicisi yürütülemez.
FORMATFILE_DATA_SOURCE = 'data_source_name'
Şunlar için geçerlidir: SQL Server 2017 (14.x).
İçeri aktarılan verilerin şemasını tanımlayacak biçim dosyasının Azure Blob Depolama konumuna işaret eden adlandırılmış bir dış veri kaynağı belirtir. Dış veri kaynağı, SQL Server 2017'de (14.x) eklenen seçenek kullanılarak TYPE = BLOB_STORAGE
oluşturulmalıdır. Daha fazla bilgi için bkz. CREATE EXTERNAL DATA SOURCE.
KEEPIDENTITY
İçeri aktarılan veri dosyasındaki kimlik değerinin veya değerlerinin kimlik sütunu için kullanılacağını belirtir. KEEPIDENTITY belirtilmezse, bu sütunun kimlik değerleri doğrulanır ancak içeri aktarılmaz ve SQL Server, tablo oluşturma sırasında belirtilen tohum ve artım değerlerine göre otomatik olarak benzersiz değerler atar. Veri dosyası tablo veya görünümdeki kimlik sütunu için değerler içermiyorsa, veri içeri aktarılırken tablodaki veya görünümdeki kimlik sütununun atlanması gerektiğini belirtmek için bir biçim dosyası kullanın; SQL Server, sütun için otomatik olarak benzersiz değerler atar. Daha fazla bilgi için bkz. DBCC CHECKIDENT (Transact-SQL).
Daha fazla bilgi için bkz. Tanımlama değerlerini koruma hakkında bkz. Verileri Toplu İçeri Aktarırken Kimlik Değerlerini Koruma (SQL Server).
KEEPNULLS
Eklenen sütunlar için varsayılan değerler yerine, toplu içeri aktarma işlemi sırasında boş sütunların null değeri tutması gerektiğini belirtir. Daha fazla bilgi için bkz. Null Değerleri Koru veya Toplu İçeri Aktarma Sırasında Varsayılan Değerleri Kullanma (SQL Server).
KILOBYTES_PER_BATCH = kilobytes_per_batch
Kilobytes_per_batch olarak toplu iş başına yaklaşık kilobayt (KB) veri sayısını belirtir. Varsayılan olarak, KILOBYTES_PER_BATCH bilinmiyor. Performansla ilgili önemli noktalar hakkında bilgi için bu makalenin devamında yer alan Performansla ilgili dikkat edilmesi gerekenler bölümüne bakın.
LASTROW = last_row
Yüklenecek son satırın sayısını belirtir. Varsayılan değer 0'dır ve bu, belirtilen veri dosyasındaki son satırı gösterir.
MAXERRORS = max_errors
Toplu içeri aktarma işlemi iptal edilmeden önce verilerde izin verilen en fazla söz dizimi hatası sayısını belirtir. Toplu içeri aktarma işlemi tarafından içeri aktarılabilen her satır yoksayılır ve tek bir hata olarak sayılır. max_errors belirtilmezse, varsayılan değer 10'dur.
MAX_ERRORS seçeneği kısıtlama denetimleri veya para ve bigint veri türlerini dönüştürme için geçerli değildir.
SİPARİŞ ( { sütun [ ASC | DESC ] } [ ,... n ] )
Veri dosyasındaki verilerin nasıl sıralanacağını belirtir. İçeri aktarılan veriler varsa tablodaki kümelenmiş dizine göre sıralanırsa toplu içeri aktarma performansı iyileştirilir. Veri dosyası kümelenmiş dizin anahtarının sırası dışında bir düzende sıralanmışsa veya tabloda kümelenmiş dizin yoksayılır ORDER
. Sağlanan sütun adları, hedef tabloda geçerli sütun adları olmalıdır. Varsayılan olarak toplu ekleme işlemi veri dosyasının sıralı olmadığını varsayar. İyileştirilmiş toplu içeri aktarma için SQL Server, içeri aktarılan verilerin sıralandığını da doğrular.
n , birden çok sütunun belirtilebileceğini belirten bir yer tutucudur.
ROWS_PER_BATCH = rows_per_batch
Veri dosyasındaki yaklaşık veri satır sayısını gösterir.
Varsayılan olarak, veri dosyasındaki tüm veriler tek bir işlem olarak sunucuya gönderilir ve toplu işlemdeki satır sayısı sorgu iyileştiricisi tarafından bilinmez. ROWS_PER_BATCH (0 değeriyle > ) belirtirseniz, sunucu toplu içeri aktarma işlemini iyileştirmek için bu değeri kullanır. ROWS_PER_BATCH için belirtilen değer, gerçek satır sayısıyla yaklaşık olarak aynı olmalıdır. Performansla ilgili önemli noktalar hakkında bilgi için bu makalenin devamında yer alan Performansla ilgili dikkat edilmesi gerekenler bölümüne bakın.
TABLOCK
Toplu içeri aktarma işlemi süresi boyunca tablo düzeyinde bir kilidin alındığını belirtir. Tabloda dizin yoksa ve TABLOCK belirtilirse, tablo birden çok istemci tarafından eşzamanlı olarak yüklenebilir. Varsayılan olarak, kilitleme davranışı toplu yüklemede tablo seçeneği tablo kilidi tarafından belirlenir. Toplu içeri aktarma işleminin süresi boyunca bir kilidin tutulması, tablodaki kilit çekişmesini azaltır, bazı durumlarda performansı önemli ölçüde iyileştirebilir. Performansla ilgili önemli noktalar hakkında bilgi için bu makalenin devamında yer alan Performansla ilgili dikkat edilmesi gerekenler bölümüne bakın.
Bir columnstore dizini için kilitleme davranışı farklıdır çünkü dahili olarak birden çok satır kümesine ayrılmıştır. Her iş parçacığı, eş zamanlı veri yükleme oturumlarıyla paralel veri yüküne izin vererek satır kümesinde X kilidi alarak verileri yalnızca her satır kümesine yükler. TABLOCK seçeneğinin kullanılması, iş parçacığının tabloda X kilidi almasına neden olur (geleneksel satır kümeleri için BU kilidinden farklı olarak), diğer eşzamanlı iş parçacıklarının verileri eşzamanlı olarak yüklemesini engeller.
Giriş dosyası biçimi seçenekleri
BIÇIM = 'CSV'
Şunlar için geçerlidir: SQL Server 2017 (14.x).
RFC 4180 standardıyla uyumlu virgülle ayrılmış değerler dosyasını belirtir.
BULK INSERT Sales.Orders
FROM '\\SystemX\DiskZ\Sales\data\orders.csv'
WITH ( FORMAT = 'CSV');
FIELDQUOTE = 'field_quote'
Şunlar için geçerlidir: SQL Server 2017 (14.x).
CSV dosyasında tırnak karakteri olarak kullanılacak bir karakter belirtir. Belirtilmezse, teklif karakteri (") RFC 4180 standardında tanımlandığı gibi tırnak karakteri olarak kullanılır.
FORMATFILE = 'format_file_path'
Biçim dosyasının tam yolunu belirtir. Biçim dosyası, aynı tablo veya görünümde bcp yardımcı programı kullanılarak oluşturulan depolanan yanıtları içeren veri dosyasını açıklar. Biçim dosyası şu durumlarda kullanılmalıdır:
- Veri dosyası tablo veya görünümden daha büyük veya daha az sütun içeriyor.
- Sütunlar farklı bir sıradadır.
- Sütun sınırlayıcıları farklılık gösterir.
- Veri biçiminde başka değişiklikler de vardır. Biçim dosyaları genellikle bcp yardımcı programı kullanılarak oluşturulur ve gerektiğinde bir metin düzenleyicisiyle değiştirilir. Daha fazla bilgi için bkz. bcp Yardımcı Programı ve Biçim dosyası oluşturma.
SQL Server 2017(14.x) ile başlayarak ve Azure SQL Veritabanı'nda format_file_path
Azure Blob Depolama'da olabilir.
FIELDTERMINATOR = 'field_terminator'
char ve widechar veri dosyaları için kullanılacak alan sonlandırıcısını belirtir. Varsayılan alan sonlandırıcısı \t
'dır (sekme karakteri). Daha fazla bilgi için bkz. Alan ve Satır Sonlandırıcıları Belirtme (SQL Server).
BULK INSERT bing_covid_19_data
FROM 'https://<data-lake>.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv'
WITH (FIELDTERMINATOR = ',', FIRSTROW=2);
Uyarı
değerini uygun bir URL ile değiştirin <data-lake>.blob.core.windows.net
.
ROWTERMINATOR = 'row_terminator'
char ve widechar veri dosyaları için kullanılacak satır sonlandırıcısını belirtir. Varsayılan satır sonlandırıcısı \r\n
(yeni satır karakteri). Daha fazla bilgi için bkz. Alan ve Satır Sonlandırıcıları Belirtme (SQL Server).
Uyumluluk
BULK INSERT, bir dosyadan okunan verilerin katı veri doğrulamasını ve veri denetimlerini zorunlu kılarak mevcut betiklerin geçersiz verilerde yürütülürken başarısız olmasına neden olabilir. Örneğin BULK INSERT şunları doğrular:
- Kayan veya gerçek veri türlerinin yerel gösterimleri geçerlidir.
- Unicode verilerinin bayt uzunluğu çift sayıdır.
Veri türleri
Dizeden ondalıka veri türü dönüştürmeleri
BULK INSERT'de kullanılan dizeden ondalıka veri türü dönüştürmeleri, bilimsel gösterim kullanan sayısal değerleri temsil eden dizeleri reddeden Transact-SQL CONVERT işleviyle aynı kuralları izler. Bu nedenle, BULK INSERT bu tür dizeleri geçersiz değerler olarak değerlendirir ve dönüştürme hatalarını bildirir.
Bu davranışa geçici bir çözüm olarak bilimsel gösterimi kayan verileri ondalık sütuna toplu olarak içeri aktarmak için bir biçim dosyası kullanın. Biçim dosyasında sütunu açıkça gerçek veya kayan veri olarak tanımlayın. Bu veri türleri hakkında daha fazla bilgi için bkz . float and real (Transact-SQL).
Biçim dosyaları , gerçek verileri SQLFLT4 veri türü olarak, kayan verileri ise SQLFLT8 veri türü olarak gösterir. XML olmayan biçim dosyaları hakkında bilgi için bkz. Bcp (SQL Server) Kullanarak Dosya Depolama Türünü Belirtme.
Bilimsel gösterim kullanan sayısal bir değeri içeri aktarma örneği
Bu örnekte veritabanında aşağıdaki tablo bulktest
kullanılır:
CREATE TABLE dbo.t_float(c1 FLOAT, c2 DECIMAL (5,4));
Kullanıcı verileri tabloya toplu olarak t_float
aktarmak istiyor. C:\t_float-c.dat veri dosyası bilimsel gösterimi float verilerini içerir; mesela:
8.0000000000000002E-2 8.0000000000000002E-2
Bu örneği kopyalarken, sekme karakterlerini (\t) boşluk olarak kaydeden farklı metin düzenleyicileri ve kodlamaları unutmayın. Bu örnekte daha sonra bir sekme karakteri beklenir.
Ancak BULK INSERT, ikinci sütunu t_float
veri türünü kullandığından c2
bu verileri doğrudan decimal
içine aktaramaz. Bu nedenle, bir biçim dosyası gereklidir. Biçim dosyasının bilimsel gösterimi float verilerini sütunun c2
ondalık biçimiyle eşlemesi gerekir.
Aşağıdaki biçim dosyası, ikinci veri alanını ikinci sütuna eşlemek için veri türünü kullanır SQLFLT8
:
<?xml version="1.0"?>
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RECORD>
<FIELD ID="1" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="30"/>
<FIELD ID="2" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="30"/> </RECORD> <ROW>
<COLUMN SOURCE="1" NAME="c1" xsi:type="SQLFLT8"/>
<COLUMN SOURCE="2" NAME="c2" xsi:type="SQLFLT8"/> </ROW> </BCPFORMAT>
Test verilerini test tablosuna aktarmak için bu biçim dosyasını (dosya adını C:\t_floatformat-c-xml.xml
kullanarak) kullanmak için aşağıdaki Transact-SQL deyimini verin:
BULK INSERT bulktest.dbo.t_float
FROM 'C:\t_float-c.dat' WITH (FORMATFILE = 'C:\t_floatformat-c-xml.xml');
Önemli
Azure SQL Veritabanı yalnızca Azure Blob Depolama'dan okumayı destekler.
SQLXML belgelerini toplu dışarı veya içeri aktarmaya yönelik veri türleri
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 türü | Etki |
---|---|
SQLCHAR veya SQLVARCHAR | Veriler, istemci kod sayfasında veya harmanlama tarafından ima edilen kod sayfasında gönderilir. Bu etki, bir biçim dosyası belirtmeden DATAFILETYPE = 'char' belirtilmesiyle aynıdır. |
SQLNCHAR veya SQLNVARCHAR | Veriler Unicode olarak gönderilir. Etkisi, bir biçim dosyası belirtmeden öğesini DATAFILETYPE = 'widechar' belirtmekle aynıdır. |
SQLBINARY veya SQLVARBIN | Veriler dönüştürme olmadan gönderilir. |
Açıklamalar
BULK INSERT deyiminin, deyiminin INSERT ... SELECT * FROM OPENROWSET(BULK...)
ve komutunun karşılaştırması bcp
için bkz. Verilerin Toplu İçeri ve Dışarı Aktarılması.
Verileri toplu içeri aktarmaya hazırlama hakkında bilgi için bkz. Verileri Toplu Dışarı Veya İçeri Aktarma için Hazırlama.
BULK INSERT deyimi, verileri tabloya veya görünüme aktarmak için kullanıcı tanımlı bir işlem içinde yürütülebilir. İsteğe bağlı olarak, verileri toplu içeri aktarmak için birden çok eşleşme kullanmak için bir işlem BULK INSERT deyiminde BATCHSIZE yan tümcesini belirtebilir. Birden çok toplu işlem geri alınırsa, işlemin SQL Server'a gönderdiği her toplu işlem geri alınır.
Birlikte çalışabilirlik
CSV dosyasından verileri içeri aktarma
SQL Server 2017(14.x) sürümünden itibaren BULK INSERT, Azure SQL Veritabanı gibi CSV biçimini de destekler.
SQL Server 2017 (14.x) öncesinde virgülle ayrılmış değer (CSV) dosyaları SQL Server toplu içeri aktarma işlemleri tarafından desteklenmez. Ancak bazı durumlarda, VERILERI SQL Server'a toplu olarak aktarmak için veri dosyası olarak bir CSV dosyası kullanılabilir. CSV veri dosyasından veri içeri aktarma gereksinimleri hakkında bilgi için bkz. Verileri Toplu Dışarı Veya İçeri Aktarma için Hazırlama (SQL Server).
Günlük davranışı
SQL Server'a toplu içeri aktarma ile gerçekleştirilen satır ekleme işlemlerinin işlem günlüğüne ne zaman kaydedildiği hakkında bilgi için bkz. Toplu İçeri Aktarmada Minimum Günlük Kaydı Önkoşulları. Azure SQL Veritabanı'nda minimum günlük kaydı desteklenmez.
Kısıtlamalar
BULK INSERT ile bir biçim dosyası kullanırken en fazla 1024 alan belirtebilirsiniz. Bu, tabloda izin verilen en fazla sütun sayısıyla aynıdır. BULK INSERT ile 1024'ten fazla alan içeren bir veri dosyasıyla biçim dosyası kullanırsanız, BULK INSERT 4822 hatasını oluşturur. bcp yardımcı programının bu sınırlaması yoktur, bu nedenle 1024'ten fazla alan içeren veri dosyaları için biçim dosyası olmadan BULK INSERT kullanın veya bcp komutunu kullanın.
Performansla ilgili dikkat edilmesi gerekenler
Tek bir toplu işlemde boşaltılacak sayfa sayısı iç eşiği aşarsa, toplu iş işlendiğinde hangi sayfaların boşaltılması gerektiğini belirlemek için arabellek havuzunun tam taraması oluşabilir. Bu tam tarama toplu içeri aktarma performansına zarar verebilir. Büyük bir arabellek havuzu yavaş G/Ç alt sistemiyle birleştirildiğinde iç eşiği aşma olasılığı oluşur. Büyük makinelerde arabellek taşmasını önlemek için TABLOCK ipucunu (toplu iyileştirmeleri kaldıracak) veya daha küçük bir toplu iş boyutu (toplu iyileştirmeleri koruyan) kullanmayın.
Sizin için en uygun olanı bulmak için veri yükünüzle çeşitli toplu iş boyutlarını test etmelisiniz. Toplu iş boyutunun kısmi geri alma etkileri olduğunu unutmayın. İşleminiz başarısız olursa ve BULK INSERT'i yeniden kullanmadan önce, hata oluşmadan önce başarıyla eklenen satırların bir bölümünü kaldırmak için el ile ek çalışma yapmanız gerekebilir.
Azure SQL Veritabanı ile, çok büyük miktarda veriyi içeri aktarıyorsanız içeri aktarma işleminden önce veritabanının veya örneğin performans düzeyini geçici olarak artırmayı göz önünde bulundurun.
Güvenlik
Güvenlik hesabı temsilcisi (kimliğe bürünme)
Bir kullanıcı SQL Server oturum açma bilgileri kullanıyorsa, SQL Server işlem hesabının güvenlik profili kullanılır. SQL Server kimlik doğrulaması kullanılarak oturum açma bilgilerinin kimliği Veritabanı Altyapısı dışında doğrulanamaz. Bu nedenle, BIR BULK INSERT komutu SQL Server kimlik doğrulaması kullanılarak oturum açma işlemiyle başlatıldığında, verilere bağlantı SQL Server işlem hesabının (SQL Server Veritabanı Altyapısı hizmeti tarafından kullanılan hesap) güvenlik bağlamı kullanılarak yapılır.
Kaynak verileri başarıyla okumak için SQL Server Veritabanı Altyapısı tarafından kullanılan hesaba kaynak verilere erişim vermelisiniz. Buna karşılık, bir SQL Server kullanıcısı Windows Kimlik Doğrulaması kullanarak oturum açarsa, kullanıcı SQL Server işleminin güvenlik profilinden bağımsız olarak yalnızca kullanıcı hesabı tarafından erişilebilen dosyaları okuyabilir.
BIR bilgisayardan sqlcmd veya osql kullanarak BULK INSERT deyimini yürütürken, ikinci bir bilgisayarda SQL Server'a veri eklerken ve UNC yolu kullanarak üçüncü bilgisayarda bir data_file belirtirken 4861 hatası alabilirsiniz.
Bu hatayı çözmek için SQL Server Kimlik Doğrulaması'nı kullanın ve SQL Server işlem hesabının güvenlik profilini kullanan bir SQL Server oturum açma bilgisi belirtin veya Windows'un güvenlik hesabı temsilini etkinleştirecek şekilde yapılandırın. Kullanıcı hesabının temsilci seçme için güvenilir olmasını etkinleştirme hakkında bilgi için Windows Yardımı'na bakın.
Bu ve BULK INSERT kullanımıyla ilgili diğer güvenlik konuları hakkında daha fazla bilgi için bkz. BULK INSERT veya OPENROWSET(BULK...) (SQL Server) Kullanarak Toplu Verileri İçeri Aktarma.
Azure Blob Depolama'dan içeri aktarma yaparken ve veriler genel (anonim erişim) olmadığında, ANA ANAHTARla şifrelenmiş bir SAS anahtarına dayalı OLARAK DATABASE SCOPED CREDENTIAL oluşturun ve sonra BULK INSERT komutunuzda kullanmak üzere bir dış veritabanı kaynağı oluşturun.
Alternatif olarak, genel olmayan depolama hesaplarında veri erişimine yönelik istekleri yetkilendirmeye dayalı MANAGED IDENTITY
oluşturun. kullanırken MANAGED IDENTITY
Azure depolama, gerekli Azure Blob Depolama kapsayıcıları için yönetilen kimliğe okuma/yazma erişimi sağlayan Depolama Blob Verileri Katkıda Bulunanı yerleşik Azure rol tabanlı erişim denetimi (RBAC) rolünü ekleyerek örneğin yönetilen kimliğine izin vermelidir. Azure SQL Yönetilen Örneği, sistem tarafından atanan yönetilen kimliğe sahiptir ve kullanıcı tarafından atanan bir veya daha fazla yönetilen kimliğe de sahip olabilir. İstekleri yetkilendirmek için, sistem tarafından atanan yönetilen kimlikleri veya kullanıcı tarafından atanan yönetilen kimlikleri kullanabilirsiniz. Yetkilendirme için yönetilen default
örneğin kimliği (kullanıcı tarafından atanan birincil kimlik veya kullanıcı tarafından atanan yönetilen kimlik belirtilmezse sistem tarafından atanan yönetilen kimlik) kullanılır. Örnek için bkz. Azure Blob Depolama'da bir dosyadan veri içeri aktarma.
Önemli
Yönetilen Kimlik yalnızca Azure SQL için geçerlidir. SQL Server Yönetilen Kimliği desteklemez.
İzinler
INSERT ve ADMINISTER BULK OPERATIONS izinleri gerektirir. Azure SQL Veritabanı'nda INSERT ve ADMINISTER DATABASE BULK OPERATIONS izinleri gereklidir. TOPLU İşlemLERI YÖNET izinleri veya bulkadmin rolü Linux üzerinde SQL Server için desteklenmez. Linux üzerinde SQL Server için yalnızca sysadmin toplu eklemeler gerçekleştirebilir.
Ayrıca, aşağıdaki koşullardan biri veya daha fazlası doğruysa ALTER TABLE izni gerekir:
Kısıtlamalar var ve CHECK_CONSTRAINTS seçeneği belirtilmemiş.
Kısıtlamaları devre dışı bırakmak varsayılan davranıştır. Kısıtlamaları açıkça denetlemek için CHECK_CONSTRAINTS seçeneğini kullanın.
Tetikleyiciler var ve FIRE_TRIGGER seçeneği belirtilmemiş.
Varsayılan olarak tetikleyiciler tetiklenmez. Tetikleyicileri açıkça başlatmak için FIRE_TRIGGER seçeneğini kullanın.
Veri dosyasından kimlik değerini içeri aktarmak için KEEPIDENTITY seçeneğini kullanırsınız.
Örnekler
A. Dosyadan verileri içeri aktarmak için kanallar kullanma
Aşağıdaki örnek, alan sonlandırıcısı () ve AdventureWorks2022.Sales.SalesOrderDetail
satır sonlandırıcısı olarak bir kanal (|
) kullanarak belirtilen veri dosyasından tabloya sipariş ayrıntı bilgilerini |\n
içeri aktarır.
BULK INSERT AdventureWorks2022.Sales.SalesOrderDetail
FROM 'f:\orders\lineitem.tbl'
WITH
(
FIELDTERMINATOR = ' |'
, ROWTERMINATOR = ' |\n'
);
Önemli
Azure SQL Veritabanı yalnızca Azure Blob Depolama'dan okumayı destekler.
B. FIRE_TRIGGERS bağımsız değişkenini kullanma
Aşağıdaki örnek bağımsız değişkeni belirtir FIRE_TRIGGERS
.
BULK INSERT AdventureWorks2022.Sales.SalesOrderDetail
FROM 'f:\orders\lineitem.tbl'
WITH
(
FIELDTERMINATOR = ' |'
, ROWTERMINATOR = ':\n'
, FIRE_TRIGGERS
);
Önemli
Azure SQL Veritabanı yalnızca Azure Blob Depolama'dan okumayı destekler.
C. Satır sonlandırıcısı olarak satır akışı kullanma
Aşağıdaki örnek, unix çıkışı gibi satır sonlandırıcısı olarak satır akışını kullanan bir dosyayı içeri aktarır:
DECLARE @bulk_cmd VARCHAR(1000);
SET @bulk_cmd = 'BULK INSERT AdventureWorks2022.Sales.SalesOrderDetail
FROM ''<drive>:\<path>\<filename>''
WITH (ROWTERMINATOR = '''+CHAR(10)+''')';
EXEC(@bulk_cmd);
Uyarı
Microsoft Windows'un metin dosyalarını işleme şekli nedeniyle, \n
otomatik olarak ile \r\n
değiştirilir.
Önemli
Azure SQL Veritabanı yalnızca Azure Blob Depolama'dan okumayı destekler.
D. Kod sayfası belirtme
Aşağıdaki örnek, bir kod sayfasının nasıl belirtileceğini gösterir.
BULK INSERT MyTable
FROM 'D:\data.csv'
WITH
( CODEPAGE = '65001'
, DATAFILETYPE = 'char'
, FIELDTERMINATOR = ','
);
Önemli
Azure SQL Veritabanı yalnızca Azure Blob Depolama'dan okumayı destekler.
E. CSV dosyasından verileri içeri aktarma
Aşağıdaki örnekte, alan sonlandırıcı ve ;
satır sonlandırıcı olarak kullanarak 0x0a
üst bilgiyi (ilk satır) atlayarak CSV dosyasının nasıl belirtileceğini gösterilmektedir:
BULK INSERT Sales.Invoices
FROM '\\share\invoices\inv-2016-07-25.csv'
WITH (FORMAT = 'CSV'
, FIRSTROW = 2
, FIELDQUOTE = '\'
, FIELDTERMINATOR = ';'
, ROWTERMINATOR = '0x0a');
Aşağıdaki örnekte, bir CSV dosyasının UTF-8 biçiminde nasıl belirtileceğini (öğesini kullanarak CODEPAGE
65001
), üst bilgiyi (ilk satır) atlayarak, alan sonlandırıcısı olarak ve ;
satır sonlandırıcı olarak kullanmayı 0x0a
gösterir:
BULK INSERT Sales.Invoices
FROM '\\share\invoices\inv-2016-07-25.csv'
WITH ( CODEPAGE = '65001'
, FORMAT = 'CSV'
, FIRSTROW = 2
, FIELDQUOTE = '\'
, FIELDTERMINATOR = ';'
, ROWTERMINATOR = '0x0a');
Önemli
Azure SQL Veritabanı yalnızca Azure Blob Depolama'dan okumayı destekler.
F. Azure Blob Depolama'da bir dosyadan veri içeri aktarma
Aşağıdaki örnekte, Paylaşılan Erişim İmzası (SAS) oluşturduğunuz Azure Blob Depolama konumundaki bir CSV dosyasından verilerin nasıl yüklendiği gösterilmektedir. Azure Blob Depolama konumu dış veri kaynağı olarak yapılandırılır ve bu, kullanıcı veritabanında ana anahtar kullanılarak şifrelenmiş bir SAS anahtarı kullanılarak 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***************';
-- NOTE: Make sure that you don't have a leading ? in 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/invoices'
, CREDENTIAL = MyAzureBlobStorageCredential --> CREDENTIAL is not required if a blob is configured for public (anonymous) access!
);
BULK INSERT Sales.Invoices
FROM 'inv-2017-12-08.csv'
WITH (DATA_SOURCE = 'MyAzureBlobStorage');
Aşağıdaki örnekte, Yönetilen Kimlik kullanarak Azure Blob depolama konumundaki bir csv dosyasından veri yüklemek için BULK INSERT komutunun nasıl kullanılacağı gösterilmektedir. Azure Blob depolama konumu bir dış veri kaynağı olarak yapılandırılır.
--> 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 = 'Managed Identity';
-- NOTE: Make sure you have granted Storage Bob Data Contributor RBAC on storage to provides read/write access to the managed identity for the necessary Azure Blob Storage containers.
CREATE EXTERNAL DATA SOURCE MyAzureBlobStorage
WITH ( TYPE = BLOB_STORAGE,
LOCATION = 'https://****************.blob.core.windows.net/invoices'
, CREDENTIAL= MyAzureBlobStorageCredential --> CREDENTIAL is not required if a blob is configured for public (anonymous) access!
);
BULK INSERT Sales.Invoices
FROM 'inv-2017-12-08.csv'
WITH (DATA_SOURCE = 'MyAzureBlobStorage');
Önemli
Yönetilen Kimlik yalnızca Azure SQL için geçerlidir. SQL Server Yönetilen Kimliği desteklemez.
Önemli
Azure SQL yalnızca Azure Blob Depolama'dan okumayı destekler.
G. Azure Blob Depolama'da bir dosyadan veri içeri aktarma ve hata dosyası belirtme
Aşağıdaki örnekte, dış veri kaynağı olarak yapılandırılan bir Azure Blob Depolama konumundaki CSV dosyasından veri yükleme ve ayrıca bir hata dosyası belirtme gösterilmektedir. Paylaşılan erişim imzası kullanarak veritabanı kapsamlı bir kimlik bilgilerine ihtiyacınız olacaktır. Azure SQL Veritabanı'nda çalışıyorsa ERRORFILE seçeneğine ERRORFILE_DATA_SOURCE eşlik etmelidir, aksi takdirde içeri aktarma işlemi izin hatasıyla başarısız olabilir. ERRORFILE içinde belirtilen dosya kapsayıcıda bulunmamalıdır.
BULK INSERT Sales.Invoices
FROM 'inv-2017-12-08.csv'
WITH (
DATA_SOURCE = 'MyAzureInvoices'
, FORMAT = 'CSV'
, ERRORFILE = 'MyErrorFile'
, ERRORFILE_DATA_SOURCE = 'MyAzureInvoices');
Kimlik bilgilerini ve dış veri kaynağını yapılandırma gibi eksiksiz BULK INSERT
örnekler için bkz. Azure Blob Depolama'da Verilere Toplu Erişim Örnekleri.
Diğer örnekler
Diğer BULK INSERT
örnekler aşağıdaki makalelerde verilmiştir:
- XML Belgelerinin Toplu İçeri ve Dışarı Aktarılması örnekleri (SQL Server)
- Verileri Toplu İçeri Aktarırken Kimlik Değerlerini Koruma (SQL Server)
- Null Değerleri Koru veya Toplu İçeri Aktarma Sırasında Varsayılan Değerleri Kullan (SQL Server)
- Alan ve Satır Sonlandırıcıları Belirtme (SQL Server)
- Verileri Toplu İçeri Aktarmak için Biçim Dosyası Kullanma (SQL Server)
- Verileri İçeri veya Dışarı Aktarmak için Karakter Biçimini Kullanma (SQL Server)
- Verileri İçeri veya Dışarı Aktarmak için Yerel Biçim Kullanma (SQL Server)
- Verileri İçeri veya Dışarı Aktarmak için Unicode Karakter Biçimi Kullanma (SQL Server)
- Verileri İçeri veya Dışarı Aktarmak için Unicode Yerel Biçimi Kullanma (SQL Server)
- SQL Server'da Bir Tablo Sütununu Atlamak için Biçim Dosyası Kullanma
- Tablo Sütunlarını Data-File Alanlarla (SQL Server) Eşlemek için Biçim Dosyası Kullanma