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
Bu makalede, Transact-SQL BULK INSERT deyimini ve INSERT...SELECT * FROM OPENROWSET(BULK...) deyimini kullanarak verileri bir veri dosyasından SQL Server veya Azure SQL Veritabanı tablosuna toplu olarak içeri aktarmaya yönelik genel bir bakış sağlanır.
Bu makalede, BULK INSERT ve OPENROWSET(BULK...) kullanımı ile uzak bir veri kaynağından toplu içeri aktarma için bu yöntemlerin güvenlik konuları da açıklanmaktadır.
SQL BULK INSERT deyimi
BULK INSERT bir veri dosyasındaki verileri tabloya yükler. Bu işlevsellik, in komutunun bcp seçeneği tarafından sağlanan işleve benzer. Ancak, veri dosyası SQL Server işlemi tarafından okunur.
BULK INSERT söz diziminin açıklamasına başvurabilirsiniz, bkz. BULK INSERT (Transact-SQL).
BULK INSERT örnekleri
- TOPLU INSERT (Transact-SQL)
- XML belgeleri (SQL Server) toplu içeri ve dışarı aktarma örnekleri
- Verileri toplu içeri aktarırken kimlik değerlerini koruma (SQL Server)
- Toplu içeri aktarma (SQL Server) sırasında null veya varsayılan değerleri tutma
- Alan ve satır sonlandırıcılarını belirtme (SQL Server)
- Verileri toplu içeri aktarmak için biçim dosyası kullanma (SQL Server)
- Verileri içeri veya dışarı aktarmak için karakter biçimini kullanma (SQL Server)
- Verileri içeri veya dışarı aktarmak için yerel biçimi kullanma (SQL Server)
- Verileri içeri veya dışarı aktarmak için unicode karakter biçimini 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ı veri dosyası alanlarına (SQL Server) eşlemek için biçim dosyası kullanma
OPENROWSET(BULK...) Fonksiyonu
Toplu OPENROWSET satır kümesi sağlayıcısına OPENROWSET işlevi çağrılarak ve BULK seçeneği belirtilerek erişilir. işlevi, OPENROWSET(BULK...) bir veri sağlayıcısı aracılığıyla veri dosyası gibi uzak bir veri kaynağına bağlanarak uzak verilere erişmenizi sağlar.
Verileri toplu aktarmak için, bir OPENROWSET(BULK...) deyimi içindeki SELECT...FROM yan tümcesinden INSERT çağrısı yapın.
Verileri toplu içeri aktarmaya yönelik temel söz dizimi şöyledir:
INSERT ... SELECT * FROM OPENROWSET(BULK...)
Bir INSERT deyimde kullanıldığında tablo OPENROWSET(BULK...) ipuçlarını destekler. gibi normal tablo ipuçlarına ek olarakTABLOCKBULK, yan tümcesi aşağıdaki özel tablo ipuçlarını kabul edebilir:
-
IGNORE_CONSTRAINTS(yalnızca CHECK kısıtlamalarını yoksayar) IGNORE_TRIGGERSKEEPDEFAULTSKEEPIDENTITY
Daha fazla bilgi için bkz. Tablo ipuçları (Transact-SQL).
BULK seçeneğinin ek kullanımları hakkında bilgi için bkz. OPENROWSET BULK (Transact-SQL).
INSERT...SELECT * FROM OPENROWSET(BULK...) ifadeleri - örnekler
- XML belgeleri (SQL Server) toplu içeri ve dışarı aktarma örnekleri
- Verileri toplu içeri aktarırken kimlik değerlerini koruma (SQL Server)
- Toplu içeri aktarma (SQL Server) sırasında null veya varsayılan değerleri tutma
- Verileri toplu içeri aktarmak için biçim dosyası kullanma (SQL Server)
- Verileri içeri veya dışarı aktarmak için karakter biçimini kullanma (SQL Server)
- SQL Server'da Bir Tablo Sütununu Atlamak için Biçim Dosyası Kullanma
- Bir veri alanını atlamak için biçim dosyası kullanma (SQL Server)
- Tablo sütunlarını veri dosyası alanlarına (SQL Server) eşlemek için biçim dosyası kullanma
Güvenlikle ilgili dikkat edilmesi gerekenler
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, SQL Server kimlik doğrulaması kullanılarak bir BULK INSERT komut oturum açma işlemiyle başlatıldığında, veri bağlantısı 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.
Örneğin, Windows Kimlik Doğrulaması kullanarak SQL Server örneğinde oturum açan bir kullanıcıyı düşünün. Kullanıcının bir veri dosyasındaki verileri SQL Server tablosuna aktarmak için BULK INSERT veya OPENROWSET kullanabilmesi için, kullanıcı hesabı veri dosyasına okuma erişimi gerektirir. Veri dosyasına erişim sayesinde, SQL Server işleminin dosyaya erişim izni olmasa bile kullanıcı dosyadaki verileri bir tabloya aktarabilir. Kullanıcının SQL Server işlemine dosya erişimi izni vermesi gerekmez.
SQL Server ve Microsoft Windows, kimliği doğrulanmış bir Windows kullanıcısının kimlik bilgilerini ileterek SQL Server örneğinin başka bir SQL Server örneğine bağlanmasını sağlayacak şekilde yapılandırılabilir. Bu düzenleme kimliğe bürünme veya temsilci seçme olarak bilinir. BULK INSERT veya OPENROWSET kullandığınızda SQL Server sürümünün kullanıcı kimliğine bürünme için güvenliği nasıl işlediğini anlamak önemlidir. Kullanıcı kimliğine bürünme, veri dosyasının SQL Server işleminden veya kullanıcıdan farklı bir bilgisayarda bulunmasına olanak tanır. Örneğin, Computer_A üzerindeki bir kullanıcının Computer_B üzerindeki bir veri dosyasına erişimi varsa ve kimlik bilgileri temsilcisi uygun şekilde ayarlandıysa, kullanıcı Computer_C üzerinde çalışan bir SQL Server örneğine bağlanabilir, Computer_B'da veri dosyasına erişebilir ve bu dosyadaki verileri Computer_C bir tabloya toplu olarak aktarabilir.
Uzak veri dosyasından SQL Server'a toplu içeri aktarma
Başka bir bilgisayardan, BULK INSERT veya INSERT...SELECT * FROM OPENROWSET(BULK...) kullanarak verileri toplu olarak içeri aktarmak için, veri dosyasının iki bilgisayar arasında paylaşılması gerekir. Paylaşılan bir veri dosyası belirtmek için, genel biçimi \\Servername\Sharename\Path\Filename olan evrensel adlandırma kuralı (UNC) adını kullanın.
Ayrıca, veri dosyasına erişmek için kullanılan hesabın uzak diskte dosyayı okumak için gereken izinlere sahip olması gerekir.
Örneğin, aşağıdaki BULK INSERT ifadesi SalesOrderDetail adlı bir veri dosyasından AdventureWorks veritabanının newdata.txt tablosuna verileri toplu olarak içeri aktarır. Bu veri dosyası, \dailyorders adlı bir sistemdeki salesforce adlı paylaşılan klasörde, computer2 ağ paylaşım dizinindeki yer alır.
BULK INSERT AdventureWorks2022.Sales.SalesOrderDetail
FROM '\\computer2\salesforce\dailyorders\neworders.txt';
Uyarı
İstemci dosyayı SQL Server'ın bcp bağımsız olarak okuduğundan bu kısıtlama yardımcı program için geçerli değildir.
Azure Blob Depolama'dan toplu yükleme
Azure Blob depolamadan içeri aktarma yaparken ve veriler genel (anonim erişim) olmadığında, CREATE MASTER KEY ile şifrelenmiş bir SAS anahtarını temel alan CREATE DATABASE SCOPED CREDENTIAL oluşturun ve ardından komutunuzda kullanmak üzere bir BULK INSERT oluşturun.
Alternatif olarak, gizli depolama hesaplarında veri erişim isteklerini yetkilendirmek için tabanlı bir MANAGED IDENTITY oluşturun. kullanırken MANAGED IDENTITYAzure 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 örneğin default kimliği kullanılır (yani, kullanıcı tarafından atanan birincil yönetilen kimlik veya bu belirtilmemişse sistem tarafından atanan yönetilen kimlik).
Önemli
Yönetilen Kimlik, SQL Server 2025'in önceki SQL Server sürümlerinde desteklenmez.
Uyarı
Açık işlem kullanmayın veya 4861 hatası alırsınız.
BULK INSERT'i kullan
Aşağıdaki örnek, sas anahtarı oluşturduğunuz Azure Blob depolama konumundaki bir csv dosyasından veri yüklemek için komutunun nasıl kullanılacağını BULK INSERT gösterir. 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***************';
-- 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 örnek, Yönetilen Kimlik kullanarak Azure Blob depolama konumundaki bir csv dosyasından veri yüklemek için komutunun nasıl kullanılacağını BULK INSERT gösterir. 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
Azure SQL Veritabanı, Windows dosyalarından okumayı desteklemez.
OPENROWSET kullan
Aşağıdaki örnek, sas anahtarı oluşturduğunuz Azure Blob depolama konumundaki bir csv dosyasından veri yüklemek için komutunun nasıl kullanılacağını OPENROWSET gösterir. 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***************';
-- 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!
);
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ı, Windows dosyalarından okumayı desteklemez.
İlgili içerik
- INSERT (Transact-SQL)
- SELECT İfadesi (Transact-SQL)
- Verileri Toplu İçeri ve Dışarı Aktarma (SQL Server)
- OPENROWSET (Transact-SQL)
- SEÇ (Transact-SQL)
- FROM ifadesi artı JOIN, APPLY, PIVOT (Transact-SQL)
- bcp Yardımcı Programı
- TOPLU INSERT (Transact-SQL)