Aracılığıyla paylaş


Toplu içeri aktarma sırasında null değerleri veya varsayılan değerleri tutma (SQL Server)

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

Varsayılan olarak, veriler bir tabloya aktarıldığında bcp komutu ve BULK INSERT deyimi tablodaki sütunlar için tanımlanan varsayılan değerleri gözlemler. Örneğin, veri dosyasında null bir alan varsa, bunun yerine sütunun varsayılan değeri yüklenir. bcp komutu ve BULK INSERT deyimi, null değerlerin tutulacağını belirtmenize olanak sağlar.

Buna karşılık, normal INSERT bir deyim varsayılan değer eklemek yerine null değeri korur. INSERT ... SELECT * FROM OPENROWSET BULK deyimi, normal INSERT ile aynı temel davranışı sağlar, ancak ayrıca varsayılan değerleri eklemek için bir tablo ipucunu destekler.

Null değerleri koru

Aşağıdaki niteleyiciler, veri dosyasındaki boş bir alanın, tablo sütunları için varsayılan bir değeri (varsa) devralmak yerine toplu içeri aktarma işlemi sırasında null değerini korumasını belirtir. OPENROWSET BULK için, toplu yükleme işleminde belirtilmeyen tüm sütunlar varsayılan olarak olarak NULLayarlanır.

Komut Niteleyici Niteleyici türü
bcp -k Şalter
BULK INSERT KEEPNULLS* Tartışma
INSERT ... SELECT * FROM OPENROWSET(BULK...) Uygun Değil Uygun Değil

* BULK INSERT (Transact-SQL) için varsayılan değerler kullanılamıyorsa, tablo sütunu null değerlere izin verecek şekilde tanımlanmalıdır.

Not

Bu niteleyiciler, toplu içeri aktarma komutları tarafından bir tablodaki DEFAULT tanımlarının denetimini devre dışı bırakır. Ancak, herhangi bir eş zamanlı INSERT deyimi için DEFAULT tanımlarının beklenmesi gerekiyor.

INSERT ile Varsayılan Değerleri Kullanarak ... OPENROWSET BULK'tan * SEÇİN

Veri dosyasındaki boş bir alan için ilgili tablo sütununun varsayılan değerini (varsa) kullanmasını belirtebilirsiniz. Varsayılan değerleri kullanmak için tablo ipuçlarını kullanın.

Daha fazla bilgi için bkz. OPENROWSET BULK.

Örnek test koşulları

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

Kod örneğinin yerel dosya konumunu makinenizdeki bir dosya konumuyla değiştirin.

Örnek Tablo

Betik, bir test veritabanı ve adlı myNullsbir tablo oluşturur. Dördüncü tablo sütunu varsayılan Kidsdeğere sahiptir. 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.myNulls ( 
   PersonID smallint not null,
   FirstName varchar(25),
   LastName varchar(30),
   Kids varchar(13) DEFAULT 'Default Value',
   BirthDate date
   );

Örnek veri dosyası

Not Defteri'ni kullanarak boş bir dosya D:\BCP\myNulls.bcp oluşturun ve aşağıdaki örnek verileri ekleyin. Üçüncü kayıt olan dördüncü sütunda değer yoktur.

1,Anthony,Grosse,Yes,1980-02-23
2,Alica,Fatnowna,No,1963-11-14
3,Stella,Rosenhain,,1992-03-02

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 + 'MyNulls.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 '1,Anthony,Grosse,Yes,1980-02-23';
Add-Content -Path $bcpFile -Value '2,Alica,Fatnowna,No,1963-11-14';
Add-Content -Path $bcpFile -Value '3,Stella,Rosenhain,,1992-03-02';

#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 bcp yardımcı programını kullanarak şemasına myNulls.fmtgöre XML olmayan bir biçim dosyası myNullsoluşturur.

  • 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.myNulls format nul -c -f D:\BCP\myNulls.fmt -t, -T

REM Review file
Notepad D:\BCP\myNulls.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

Biçim dosyaları oluşturma hakkında daha fazla bilgi için bkz. bcp (SQL Server) ile biçim dosyası oluşturma.

Toplu içeri aktarma sırasında null değerleri koruyun veya varsayılan değerleri kullanın

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

Bcp kullanın ve null değerleri bir biçim dosyası olmadan koruyun.

Şalter -k.

Komut istemine aşağıdaki komutu girin:

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

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

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

BCP'yi kullanın ve XML olmayan bir biçim dosyasıyla null değerleri koruyun.

-k ve -f anahtarlar.

Komut istemine aşağıdaki komutu girin:

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

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

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

Bcp ve varsayılan değerleri biçim dosyası olmadan kullanma

Komut istemine aşağıdaki komutu girin:

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

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

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

BCP ve varsayılan değerleri XML olmayan bir biçim dosyasıyla kullanma

Şalter -f.

Komut istemine aşağıdaki komutu girin:

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

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

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

BULK INSERT kullanarak ve biçim dosyası olmadan null değerleri saklama

KEEPNULLS argümanı.

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

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

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

XML formatında olmayan bir dosya kullanarak BULK INSERT ile null değerleri muhafaza etme

KEEPNULLS 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.myNulls; -- for testing
BULK INSERT dbo.myNulls
   FROM 'D:\BCP\myNulls.bcp'
   WITH (
        FORMATFILE = 'D:\BCP\myNulls.fmt',
        KEEPNULLS
        );

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

BULK INSERT kullanma ve varsayılan değerleri biçim dosyası olmadan kullanma

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

USE TestDatabase;
GO

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

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

XML olmayan bir biçim dosyasıyla BULK INSERT ve varsayılan değerleri kullanma

FORMATFILE argümanı.

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

USE TestDatabase;
GO

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

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

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

FORMATFILE argümanı.

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

USE TestDatabase;
GO

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

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

OPENROWSET BULK kullanma ve varsayılan değerleri XML olmayan bir biçim dosyasıyla tutma

KEEPDEFAULTS 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.myNulls;  -- for testing
INSERT INTO dbo.myNulls
WITH (KEEPDEFAULTS) 
    SELECT *
    FROM OPENROWSET (
        BULK 'D:\BCP\myNulls.bcp', 
        FORMATFILE = 'D:\BCP\myNulls.fmt'  
        ) AS t1;

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

Bir biçim dosyasını kullanmak için

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

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