Aracılığıyla paylaş


Verileri toplu içeri aktarırken kimlik değerlerini koruma (SQL Server)

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

Kimlik değerleri içeren veri dosyaları bir Microsoft SQL Server örneğine toplu olarak içeri aktarılabilir.

Varsayılan olarak, içeri aktarılan veri dosyasındaki kimlik sütununun değerleri yoksayılır ve SQL Server benzersiz değerleri otomatik olarak atar. Benzersiz değerler, tablo oluşturma sırasında belirtilen tohum ve artım değerlerini temel alır.

Veri dosyası tablodaki tanımlayıcı sütunu için değerler içermiyorsa, verileri içeri aktarırken tablodaki tanımlayıcı sütununun atlanması gerektiğini belirtmek için bir biçim dosyası kullanın. Ek bilgi için Bir Tablo Sütununu Atlamak için Biçim Dosyası Kullanma (SQL Server) konusuna bakın.

Kimlik değerlerini koruma

SQL Server'ın veri satırlarını tabloya toplu içeri aktarırken kimlik değerleri atamasını önlemek için uygun keep-identity komut niteleyicisini kullanın. Bir keep-identity niteleyicisi belirttiğinizde, SQL Server veri dosyasındaki kimlik değerlerini kullanır.

Bu niteleyiciler aşağıdaki gibidir:

Komut Kimlik niteleyicisini koru Niteleyici türü
bcp -E Şalter
BULK INSERT KEEPIDENTITY Tartışma
INSERT ... SELECT * FROM OPENROWSET(BULK...) KEEPIDENTITY Tablo yönergesi

Daha fazla bilgi için bkz. bcp Yardımcı Programı, BULK INSERT (Transact-SQL), OPENROWSET BULK (Transact-SQL), INSERT (Transact-SQL), SELECT (Transact-SQL) ve Tablo ipuçları (Transact-SQL).

Not

Birden çok tabloda kullanılabilecek veya herhangi bir tabloya başvurmadan uygulamalardan çağrılabilen otomatik olarak artan bir sayı oluşturmak için bkz. sıra numaraları.

Örnek Test Koşulları

Bu konudaki örnekler aşağıda tanımlanan tablo, veri dosyası ve biçim dosyasını temel alır.

Örnek Tablo

Aşağıdaki betik bir test veritabanı ve myIdentityadlı bir 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 dbo.myIdentity ( 
   PersonID smallint IDENTITY(1,1) NOT NULL,
   FirstName varchar(25) NOT NULL,
   LastName varchar(30) NOT NULL,
   BirthDate date
   );

Örnek Veri Dosyası

Not Defteri'ni kullanarak boş bir dosya D:\BCP\myIdentity.bcp oluşturun ve aşağıdaki verileri ekleyin.

3,Anthony,Grosse,1980-02-23
2,Alica,Fatnowna,1963-11-14
1,Stella,Rosenhain,1992-03-02
4,Miller,Dylan,1954-01-05

Alternatif olarak, veri dosyasını oluşturmak ve doldurmak için aşağıdaki PowerShell betiğini yürütebilirsiniz:

cls
# revise directory as desired
$dir = 'D:\BCP\';

$bcpFile = $dir + 'myIdentity.bcp';

# Confirm directory exists
IF ((Test-Path -Path $dir) -eq 0)
{
    Write-Host "The path $dir does not exist; please create or modify the directory.";
    RETURN;
};

# clear content, will error if file does not exist, can be ignored
Clear-Content -Path $bcpFile -ErrorAction SilentlyContinue;

# Add data
Add-Content -Path $bcpFile -Value '3,Anthony,Grosse,1980-02-23';
Add-Content -Path $bcpFile -Value '2,Alica,Fatnowna,1963-11-14';
Add-Content -Path $bcpFile -Value '1,Stella,Rosenhain,1992-03-02';
Add-Content -Path $bcpFile -Value '4,Miller,Dylan,1954-01-05';

#Review content
Get-Content -Path $bcpFile;
Invoke-Item $bcpFile;

Örnek XML olmayan biçim dosyası

SQL Server iki tür biçim dosyasını destekler: XML dışı biçim ve XML biçimi. XML olmayan biçim, SQL Server'ın önceki sürümleri tarafından desteklenen özgün biçimdir. Daha fazla bilgi için bkz. XML dışı biçimli dosyaları kullanma (SQL Server).

Aşağıdaki komut, şemasına göre myIdentity.fmtxml olmayan bir biçim dosyası oluşturmak için myIdentity kullanır.

  • Biçim dosyası oluşturmak için bcp komutu kullanmak için format bağımsız değişkenini belirtin ve veri dosyası yolu yerine nul kullanın.
  • Biçim seçeneği de bu seçeneği gerektirir -f .
  • c karakter verilerini belirtmek için kullanılır
  • t, bir 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.

Komut istemine aşağıdaki komutu girin:

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

REM Review file
Notepad D:\BCP\myIdentity.fmt

Önemli

XML olmayan biçimli dosyanızın satır başı\satır beslemesiyle sona erdiğinden emin olun. Aksi takdirde büyük olasılıkla aşağıdaki hata iletisini alırsınız:

SQLState = S1000, NativeError = 0
Error = [Microsoft][ODBC Driver 13 for SQL Server]I/O error while reading BCP format file

Örnekler

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

bcp kullanma ve Kimlik Değerlerini bir biçim dosyası olmadan tutma

Düğme -E .

Komut istemine aşağıdaki komutu girin:

REM Truncate table (for testing)
SQLCMD -Q "TRUNCATE TABLE TestDatabase.dbo.myIdentity;"

REM Import data
bcp TestDatabase.dbo.myIdentity IN D:\BCP\myIdentity.bcp -T -c -t, -E

REM Review results
SQLCMD -Q "SELECT * FROM TestDatabase.dbo.myIdentity;"

BCP kullanma ve Kimlik değerlerini XML olmayan bir biçim dosyasıyla tutma

-E ve -f anahtarlar.

Komut istemine aşağıdaki komutu girin:

REM Truncate table (for testing)
SQLCMD -Q "TRUNCATE TABLE TestDatabase.dbo.myIdentity;"

REM Import data
bcp TestDatabase.dbo.myIdentity IN D:\BCP\myIdentity.bcp -f D:\BCP\myIdentity.fmt -T -E

REM Review results
SQLCMD -Q "SELECT * FROM TestDatabase.dbo.myIdentity;"

Bcp ve oluşturulan Kimlik değerlerini biçim dosyası olmadan kullanma

Varsayılanları kullanma.

Komut istemine aşağıdaki komutu girin:

REM Truncate table (for testing)
SQLCMD -Q "TRUNCATE TABLE TestDatabase.dbo.myIdentity;"

REM Import data
bcp TestDatabase.dbo.myIdentity IN D:\BCP\myIdentity.bcp -T -c -t,

REM Review results
SQLCMD -Q "SELECT * FROM TestDatabase.dbo.myIdentity;"

BCP ve oluşturulan Kimlik Değerlerini XML olmayan bir biçim dosyasıyla kullanma

Varsayılanları ve -f anahtarı/değiştirici kullanın.

Komut istemine aşağıdaki komutu girin:

REM Truncate table (for testing)
SQLCMD -Q "TRUNCATE TABLE TestDatabase.dbo.myIdentity;"

REM Import data
bcp TestDatabase.dbo.myIdentity IN D:\BCP\myIdentity.bcp -f D:\BCP\myIdentity.fmt -T

REM Review results
SQLCMD -Q "SELECT * FROM TestDatabase.dbo.myIdentity;"

BULK INSERT kullanma ve Kimlik değerlerini biçim dosyası olmadan tutma

KEEPIDENTITY argümanı.

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

USE TestDatabase;
GO

TRUNCATE TABLE dbo.myIdentity; -- for testing
BULK INSERT dbo.myIdentity
    FROM 'D:\BCP\myIdentity.bcp'
    WITH (
        DATAFILETYPE = 'char',  
        FIELDTERMINATOR = ',',  
        KEEPIDENTITY
        );

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

BULK INSERT kullanma ve Kimlik değerlerini XML biçiminde olmayan bir dosyayla tutma

KEEPIDENTITY ve FORMATFILE argümanları.

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

USE TestDatabase;
GO

TRUNCATE TABLE dbo.myIdentity; -- for testing
BULK INSERT dbo.myIdentity
   FROM 'D:\BCP\myIdentity.bcp'
   WITH (
        FORMATFILE = 'D:\BCP\myIdentity.fmt',
        KEEPIDENTITY
        );

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

BULK INSERT ve biçim dosyası olmadan oluşturulan kimlik değerlerini kullanın

Varsayılanları kullanma.

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

USE TestDatabase;
GO

TRUNCATE TABLE dbo.myIdentity;  -- for testing
BULK INSERT dbo.myIdentity
   FROM 'D:\BCP\myIdentity.bcp'
   WITH (
      DATAFILETYPE = 'char',  
      FIELDTERMINATOR = ','
      );

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

BULK INSERT ve oluşturulmuş Kimlik değerlerini XML dışı bir biçim dosyasıyla kullanın.

Varsayılanları ve FORMATFILE bağımsız değişkeni kullanma.

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

USE TestDatabase;
GO

TRUNCATE TABLE dbo.myIdentity;  -- for testing
BULK INSERT dbo.myIdentity
   FROM 'D:\BCP\myIdentity.bcp'
   WITH (
        FORMATFILE = 'D:\BCP\myIdentity.fmt'
        );

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

OPENROWSET BULK kullanma ve Kimlik değerlerini XML olmayan bir biçim dosyasıyla tutma

KEEPIDENTITY Tablo ipucu ve FORMATFILE bağımsız değişkeni.

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

USE TestDatabase;
GO

TRUNCATE TABLE dbo.myIdentity;  -- for testing
INSERT INTO dbo.myIdentity
WITH (KEEPIDENTITY) 
(PersonID, FirstName, LastName, BirthDate)
    SELECT *
    FROM OPENROWSET (
        BULK 'D:\BCP\myIdentity.bcp', 
        FORMATFILE = 'D:\BCP\myIdentity.fmt'  
        ) AS t1;

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

OPENROWSET BULK ve oluşturulan Kimlik değerlerini XML olmayan bir biçim dosyasıyla kullanma

Varsayılanları ve FORMATFILE bağımsız değişkeni kullanma.

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

USE TestDatabase;
GO

TRUNCATE TABLE dbo.myIdentity;  -- for testing
INSERT INTO dbo.myIdentity
(FirstName, LastName, BirthDate)
    SELECT FirstName, LastName, BirthDate
    FROM OPENROWSET (
        BULK 'D:\BCP\myIdentity.bcp', 
        FORMATFILE = 'D:\BCP\myIdentity.fmt'  
        ) AS t1;

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

Bir biçim dosyası kullanmak için

Toplu içe aktarma veya dışa aktarma için veri biçimlerini kullanma

bcp kullanırken uyumluluk için veri biçimlerini belirtmek için

  1. Alan ve satır sonlandırıcılarını belirtme (SQL Server)

  2. bcp kullanarak veri dosyalarında ön ek uzunluğunu belirtme (SQL Server)

  3. bcp kullanarak dosya depolama türünü belirtme (SQL Server)