İngilizce dilinde oku

Aracılığıyla paylaş


Tablo sütunlarını veri dosyası alanlarına (SQL Server) eşlemek için biçim dosyası kullanma

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrnekAzure Synapse AnalyticsAnalytics Platform Sistemi (PDW)

Veri dosyası, tablodaki ilgili sütunlardan farklı bir sırada düzenlenmiş alanlar içerebilir. Bu makalede, alanları tablo sütunlarından farklı bir sırada düzenlenmiş bir veri dosyasına uyarlanmış XML olmayan ve XML biçimindeki dosyalar sunulmaktadır. Değiştirilen biçim dosyası, veri alanlarını ilgili tablo sütunlarıyla eşler. Ek bilgi için 'ı inceleyin; ile bcp (SQL Server) biçim dosyası oluşturun.

XML olmayan veya XML biçimindeki bir dosya, bcp yardımcı programı komutu, BULK INSERT deyimi veya INSERT ... SELECT * FROM OPENROWSET deyimi kullanılarak tabloya veri dosyasını toplu içeri aktarmak için kullanılabilir. Daha fazla bilgi için bkz. Verileri toplu içeri aktarmak için biçim dosyası kullanma (SQL Server).

Not

Toplu ekleme de dahil olmak üzere bu söz dizimi Azure Synapse Analytics'te desteklenmez. Azure Synapse Analytics ve diğer bulut veritabanı platformu tümleştirmelerinde, veri aktarımını Azure Data Factory 'da COPY deyiminiveya COPY INTO ve PolyBase gibiT-SQL deyimlerini kullanarak gerçekleştirin.

Örnek test koşulları

Bu makaledeki değiştirilmiş biçim dosyaları örnekleri, bu makalenin devamında tanımlanan tablo ve veri dosyasını temel alır.

Örnek tablo

Aşağıdaki Transact-SQL betiği bir test veritabanı ve myRemapadlı bir tablo oluşturur.

SQL
CREATE DATABASE TestDatabase;
GO

USE TestDatabase;

CREATE TABLE myRemap
(
    PersonID SMALLINT,
    FirstName VARCHAR (25),
    LastName VARCHAR (30),
    Gender CHAR (1)
);

Örnek veri dosyası

Aşağıdaki veriler myRemaptablosunda gösterildiği gibi FirstName ve LastName ters sırada sunar. Not Defteri gibi bir metin düzenleyicisi kullanarak D:\BCP\myRemap.bcp boş bir dosya oluşturun ve aşağıdaki verileri ekleyin:

csv
1,Grosse,Anthony,M
2,Fatnowna,Alica,F
3,Rosenhain,Stella,F

Biçim dosyalarını oluşturma

verileri myRemap.bcpmyRemap tablosuna toplu olarak aktarmak için biçim dosyasının aşağıdaki eylemleri gerçekleştirmesi gerekir:

  • İlk veri alanını PersonIDilk sütuna eşleyin.
  • İkinci veri alanını LastNameüçüncü sütuna eşleyin.
  • Üçüncü veri alanını FirstNameikinci sütuna eşleyin.
  • Dördüncü veri alanını Genderdördüncü sütuna eşleyin.

Biçim dosyasını oluşturmak için en basit yöntem, bcp yardımcı programınıkullanmaktır. İlk olarak, mevcut tablodan bir temel biçim dosyası oluşturun. İkincisi, temel biçim dosyasını gerçek veri dosyasını yansıtacak şekilde değiştirin.

XML olmayan bir biçim dosyası oluşturma

Ayrıntılı bilgi için SQL Server üzerinde XML dışı biçimli dosyaların kullanımını gözden geçirin. Aşağıdaki komut, myRemapşemasına bağlı olarak myRemap.fmtXML olmayan bir biçim dosyası oluşturmak için bcp yardımcı programı kullanır. Buna ek olarak, niteleyici c karakter verilerini belirtmek için kullanılır, t, alan sonlandırıcısı olarak virgül belirtmek için kullanılır ve T tümleşik güvenlik kullanarak güvenilen bir bağlantı belirtmek için kullanılır. Komut istemine aşağıdaki komutu girin:

Windows Command Prompt
bcp TestDatabase.dbo.myRemap format nul -c -f D:\BCP\myRemap.fmt -t, -T

XML olmayan biçim dosyasını değiştirme

Terminoloji hakkında bilgi için bkz. xml olmayan biçim dosyalarının yapısı . Not Defteri'nde D:\BCP\myRemap.fmt açın ve aşağıdaki değişiklikleri yapın:

  1. biçim dosyası satırlarının sırasını yeniden düzenleyerek satırların myRemap.bcp'deki veriyle aynı sırada olması gerekir.
  2. Host dosyası alanı sıra değerlerinin sıralı olduğundan emin olun.
  3. Son biçim dosyası satırından sonra bir satır başı olduğundan emin olun.

Değişiklikleri karşılaştırın:

Önce

Output
13.0
4
1       SQLCHAR    0       7       ","      1     PersonID               ""
2       SQLCHAR    0       25      ","      2     FirstName              SQL_Latin1_General_CP1_CI_AS
3       SQLCHAR    0       30      ","      3     LastName               SQL_Latin1_General_CP1_CI_AS
4       SQLCHAR    0       1       "\r\n"   4     Gender                 SQL_Latin1_General_CP1_CI_AS

Sonra

Output
13.0
4
1       SQLCHAR    0       7       ","      1     PersonID               ""
2       SQLCHAR    0       30      ","      3     LastName               SQL_Latin1_General_CP1_CI_AS
3       SQLCHAR    0       25      ","      2     FirstName              SQL_Latin1_General_CP1_CI_AS
4       SQLCHAR    0       1       "\r\n"   4     Gender                 SQL_Latin1_General_CP1_CI_AS

Değiştirilen biçim dosyası şimdi aşağıdakileri yansıtır:

  • myRemap.bcp'daki ilk veri alanı ilk sütuna eşlenir myRemap.. PersonID
  • myRemap.bcp'daki ikinci veri alanı üçüncü sütuna eşlenir myRemap.. LastName
  • myRemap.bcp'daki üçüncü veri alanı ikinci sütuna eşlenir myRemap.. FirstName
  • myRemap.bcp'daki dördüncü veri alanı dördüncü sütunla eşlenir myRemap.. Gender

XML biçim dosyası oluşturma

Ayrıntılı bilgi için XML Biçim Dosyaları (SQL Server) gözden geçirin. Aşağıdaki komut, bcp yardımcı programı kullanarak myRemapşemasını temel alan myRemap.xmlbir xml biçimi dosyası oluşturur. Buna ek olarak, niteleyici c karakter verilerini belirtmek için kullanılır, t, alan sonlandırıcısı olarak virgül belirtmek için kullanılır ve T tümleşik güvenlik kullanarak güvenilen bir bağlantı belirtmek için kullanılır. xml tabanlı biçim dosyası oluşturmak için x niteleyici kullanılmalıdır. Komut istemine aşağıdaki komutu girin:

Windows Command Prompt
bcp TestDatabase.dbo.myRemap format nul -c -x -f D:\BCP\myRemap.xml -t, -T

XML biçim dosyasını değiştirme

XML biçim dosyaları için Şema söz dizimini terminoloji için gözden geçirin. Not Defteri'nde D:\BCP\myRemap.xml açın ve aşağıdaki değişiklikleri yapın:

  1. <FIELD> öğelerinin biçim dosyasında bildirildiği sıra, bu alanların veri dosyasında görünme sırasıdır. Bu nedenle, 2 ve 3 kimlik özniteliklerine sahip <FIELD> öğelerinin sırasını tersine çevirin.

  2. <FIELD> Kimliği öznitelik değerlerinin sıralı olduğundan emin olun.

  3. <ROW> öğesindeki <COLUMN> öğelerinin sırası, toplu işlemin bunları hedefe gönderme sırasını tanımlar. XML biçim dosyası, her <COLUMN> öğesine toplu içeri aktarma işleminin hedef tablosundaki sütunla ilişkisi olmayan bir yerel ad atar. <COLUMN> öğelerinin sırası, <RECORD> tanımındaki <FIELD> öğelerinin sıralamasından bağımsızdır. Her <COLUMN> öğesi bir <FIELD> öğesine karşılık gelir (kimliği <COLUMN> öğesinin SOURCE özniteliğinde belirtilir). Bu nedenle, <COLUMN> SOURCE değerleri düzeltme gerektiren tek özniteliklerdir. 2 ve 3 <COLUMN> SOURCE özniteliklerinin sırasını tersine çevirin.

Değişiklikleri karşılaştırın:

Önce

XML
<?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="," MAX_LENGTH="7"/>
  <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="25" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="30" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <FIELD ID="4" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="1" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
</RECORD>
<ROW>
  <COLUMN SOURCE="1" NAME="PersonID" xsi:type="SQLSMALLINT"/>
  <COLUMN SOURCE="2" NAME="FirstName" xsi:type="SQLVARYCHAR"/>
  <COLUMN SOURCE="3" NAME="LastName" xsi:type="SQLVARYCHAR"/>
  <COLUMN SOURCE="4" NAME="Gender" xsi:type="SQLCHAR"/>
</ROW>
</BCPFORMAT>

Sonra

XML
<?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="," MAX_LENGTH="7"/>
  <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="30" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="25" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <FIELD ID="4" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="1" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
</RECORD>
<ROW>
  <COLUMN SOURCE="1" NAME="PersonID" xsi:type="SQLSMALLINT"/>
  <COLUMN SOURCE="3" NAME="FirstName" xsi:type="SQLVARYCHAR"/>
  <COLUMN SOURCE="2" NAME="LastName" xsi:type="SQLVARYCHAR"/>
  <COLUMN SOURCE="4" NAME="Gender" xsi:type="SQLCHAR"/>
</ROW>
</BCPFORMAT>

Değiştirilen biçim dosyası şimdi aşağıdakileri yansıtır:

  • SÜTUN 1'e karşılık gelen ALAN 1, myRemap.. PersonID ilk tablo sütununa eşlenir
  • SÜTUN 2'ye karşılık gelen ALAN 2, üçüncü tablo sütununa yeniden eşlenir myRemap.. LastName
  • ALAN 3, SÜTUN 3'e karşılık gelen, ikinci tablo sütununa (myRemap.. FirstName) yeniden eşlenir
  • SÜTUN 4'e karşılık gelen ALAN 4, dördüncü tablo sütununa eşlenir myRemap.. Gender

Tablo sütunlarını veri dosyası alanına eşlemek için bir biçim dosyasıyla verileri içeri aktarma

Aşağıdaki örneklerde daha önce oluşturulan veritabanı, veri dosyası ve biçim dosyaları kullanılır.

bcp ve XML olmayan format dosyası kullanımı

Komut istemine aşağıdaki komutu girin.

Windows Command Prompt
bcp TestDatabase.dbo.myRemap IN D:\BCP\myRemap.bcp -f D:\BCP\myRemap.fmt -T

bcp ve XML biçim dosyasını kullanma

Komut istemine aşağıdaki komutu girin.

Windows Command Prompt
bcp TestDatabase.dbo.myRemap IN D:\BCP\myRemap.bcp -f D:\BCP\myRemap.xml -T

BULK INSERT ve XML olmayan biçim dosyası kullanma

Aşağıdaki Transact-SQL betiğini çalıştırın.

SQL
USE TestDatabase;
GO

TRUNCATE TABLE myRemap;

BULK INSERT dbo.myRemap FROM 'D:\BCP\myRemap.bcp'
    WITH (FORMATFILE = 'D:\BCP\myRemap.fmt');
GO

-- review results
SELECT *
FROM TestDatabase.dbo.myRemap;

BULK INSERT ve XML biçim dosyasını kullanma

Aşağıdaki Transact-SQL betiğini çalıştırın.

SQL
USE TestDatabase;
GO

TRUNCATE TABLE myRemap;

BULK INSERT dbo.myRemap FROM 'D:\BCP\myRemap.bcp'
    WITH (FORMATFILE = 'D:\BCP\myRemap.xml');
GO

-- review results
SELECT *
FROM TestDatabase.dbo.myRemap;

XML olmayan biçimli dosya ve OPENROWSET kullanma

Aşağıdaki Transact-SQL betiğini çalıştırın.

SQL
USE TestDatabase;
GO

TRUNCATE TABLE myRemap;

INSERT INTO dbo.myRemap
SELECT *
FROM OPENROWSET (
    BULK 'D:\BCP\myRemap.bcp',
    FORMATFILE = 'D:\BCP\myRemap.fmt'
) AS t1;
GO

-- review results
SELECT *
FROM TestDatabase.dbo.myRemap;

OPENROWSET ve XML biçim dosyasını kullanma

Aşağıdaki Transact-SQL betiğini çalıştırın.

SQL
USE TestDatabase;
GO

TRUNCATE TABLE myRemap;

INSERT INTO dbo.myRemap
SELECT *
FROM OPENROWSET (
    BULK 'D:\BCP\myRemap.bcp',
    FORMATFILE = 'D:\BCP\myRemap.xml'
) AS t1;
GO

-- review results
SELECT *
FROM TestDatabase.dbo.myRemap;