Aracılığıyla paylaş


Veri alanını atlamak için biçim dosyası kullanma (SQL Server)

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

Veri dosyası tablodaki sütun sayısından daha fazla alan içerebilir. Bu makalede, tablo sütunlarını ilgili veri alanlarıyla eşleyerek ve ek alanları yoksayarak hem XML olmayan hem de XML biçim dosyalarını daha fazla alan içeren bir veri dosyasını barındıracak şekilde değiştirme açıklanmaktadır.

Daha fazla bilgi için bkz. bcp (SQL Server) ile biçim dosyası oluşturma.

Not

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

Not

Toplu ekleme dahil olmak üzere bu söz dizimi Azure Synapse Analytics'te desteklenmez. Azure Synapse Analytics ve diğer bulut veritabanı platformu tümleştirmelerinde, Azure Data Factory 'da COPY deyiminiveya COPY INTO ve PolyBase gibiT-SQL deyimlerini kullanarak veri taşımak için kullanabilirsiniz.

Örnek test koşulları

Bu makaledeki değiştirilmiş biçim dosyalarına örnek olarak örnek tablo myTestSkipField ve veri dosyası temel alınmaktadır D:\BCP\myTestSkipField.bcp. Kod örneğindeki yerel dosya konumunu makinenizdeki bir dosya konumuyla değiştirin.

Örnek tablo

Betik, bir test veritabanı ve adlı myTestSkipFieldbir tablo oluşturur. Microsoft SQL Server Management Studio'da (SSMS) aşağıdaki Transact-SQL yürütün:

CREATE DATABASE TestDatabase;
GO

USE TestDatabase;
CREATE TABLE myTestSkipField
   (
   PersonID smallint,
   FirstName varchar(25),
   LastName varchar(30)
   );

Örnek veri dosyası

Boş bir dosya D:\BCP\myTestSkipField.bcp oluşturun ve aşağıdaki verileri ekleyin:

1,SkipMe,Anthony,Grosse
2,SkipMe,Alica,Fatnowna
3,SkipMe,Stella,Rosenhain

Biçim dosyalarını oluşturma

verileri myTestSkipField.bcpmyTestSkipField tablosuna toplu olarak aktarmak için biçim dosyasının aşağıdakileri yapması gerekir:

  • İlk veri alanını PersonIDilk sütuna eşleyin.
  • İkinci veri alanını atlayın.
  • Üçüncü veri alanını FirstNameikinci sütuna eşleyin.
  • Dördüncü veri alanını üçüncü sütunla (LastName) 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, şemasına göre myTestSkipField.fmtxml olmayan bir biçim dosyası oluşturmak için myTestSkipField kullanır. Buna ek olarak, karakter verilerini belirtmek için niteleyici c 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 kullanılarak güvenilen bir bağlantı belirtmek için kullanılır. Komut istemine aşağıdaki komutu girin:

bcp TestDatabase.dbo.myTestSkipField format nul -c -f D:\BCP\myTestSkipField.fmt -t, -T

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

XML olmayan biçimli dosyaların yapısını terminoloji için gözden geçirin. Not Defteri'nde D:\BCP\myTestSkipField.fmt açın ve aşağıdaki değişiklikleri yapın:

  1. FirstName için biçim dosyası satırının tamamını kopyalayın ve sonraki satıra FirstName sonra doğrudan yapıştırın.
  2. Yeni satır ve sonraki tüm satırlar için konak dosya alanı sırası değerini bir artır.
  3. Veri dosyasındaki gerçek alan sayısını yansıtacak şekilde sütun sayısını artırın.
  4. İkinci biçim dosyası satırı için sunucu sütun sırasını 20 olarak değiştirin.

Yapılan değişiklikleri karşılaştırın:

Önce

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

Sonra

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

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

  • 4 veri alanı
  • myTestSkipField.bcp'daki ilk veri alanı ilk sütuna eşlenir myTestSkipField.. PersonID
  • myTestSkipField.bcp'daki ikinci veri alanı hiçbir sütuna eşlenmez.
  • myTestSkipField.bcp'daki üçüncü veri alanı ikinci sütuna eşlenir myTestSkipField.. FirstName
  • myTestSkipField.bcp'daki dördüncü veri alanı üçüncü sütunla eşlenir myTestSkipField.. LastName

XML biçim dosyası oluşturma

Ayrıntılı bilgi için XML biçim dosyalarını (SQL Server) gözden geçirin. Aşağıdaki komut, bcp yardımcı programı kullanarak myTestSkipField.xmlşemasını temel alan myTestSkipFieldbir xml biçimi dosyası oluşturur.

  • Niteleyici c , karakter verilerini belirtmek için kullanılır
  • t, alan sonlandırıcı olarak virgül belirtmek için kullanılır
  • T tümleşik güvenlik kullanarak güvenilir 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:

bcp TestDatabase.dbo.myTestSkipField format nul -c -x -f D:\BCP\myTestSkipField.xml -t, -T

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

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

  1. İkinci alanın tamamını kopyalayın ve sonraki satırdaki ikinci alanın hemen arkasına yapıştırın.
  2. FIELD ID değerini yeni FIELD ve her bir sonraki FIELD için 1 artırın.
  3. COLUMN SOURCE değerini 1 artırın, FirstName ve düzeltilmiş eşlemeyi yansıtması için LastName'yi ayarlayın.

Yapılan değişiklikleri karşılaştırın:

Önce

<?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="\r\n" MAX_LENGTH="30" 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"/>
</ROW>
</BCPFORMAT>

Sonra

<?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="25" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <FIELD ID="4" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="30" 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="4" NAME="LastName" xsi:type="SQLVARYCHAR"/>
</ROW>
</BCPFORMAT>

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

  • 4 veri alanı
  • FIELD 1'e COLUMN karşılık gelen 1, ilk tablo sütununa eşlenir, myTestSkipField.. PersonID
  • FIELD 2 hiçbir COLUMN tablo sütununa karşılık gelmez ve bu nedenle hiçbir tablo sütununa eşlenmez.
  • FIELD 3'e COLUMN karşılık gelen 3, ikinci tablo sütununa eşlenir, myTestSkipField.. FirstName
  • FIELD 4'e COLUMN karşılık gelen 4, üçüncü tablo sütununa eşlenir, myTestSkipField.. LastName

Veri alanını atlamak için biçim dosyasıyla verileri içeri aktarma

Örneklerde bu makalede oluşturulan örnek veritabanı, veri dosyası ve biçim dosyaları kullanılmıştır.

bcp ve XML formatında olmayan dosya kullanma

Komut istemine aşağıdaki komutu girin:

bcp TestDatabase.dbo.myTestSkipField IN D:\BCP\myTestSkipField.bcp -f D:\BCP\myTestSkipField.fmt -T

bcp ve XML biçim dosyalarını kullanma (SQL Server)

Komut istemine aşağıdaki komutu girin:

bcp TestDatabase.dbo.myTestSkipField IN D:\BCP\myTestSkipField.bcp -f D:\BCP\myTestSkipField.xml -T

BULK INSERT (Transact-SQL) ve XML olmayan biçimli dosya kullanma

Microsoft SQL Server Management Studio'da (SSMS) aşağıdaki Transact-SQL yürütün:

USE TestDatabase;  
GO

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

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

BULK INSERT (Transact-SQL) ve XML biçim dosyalarını (SQL Server) kullanma

Microsoft SQL Server Management Studio'da (SSMS) aşağıdaki Transact-SQL yürütün:

USE TestDatabase;  
GO

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

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

OPENROWSET BULK (Transact-SQL) ve XML olmayan biçim dosyası kullanma

Microsoft SQL Server Management Studio'da (SSMS) aşağıdaki Transact-SQL yürütün:

USE TestDatabase;
GO

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

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

OPENROWSET BULK (Transact-SQL) ve XML biçim dosyalarını (SQL Server) kullanma

Microsoft SQL Server Management Studio'da (SSMS) aşağıdaki Transact-SQL yürütün:

USE TestDatabase;  
GO

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

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