Keeping Nulls or Using Default Values During Bulk Import

Domyślnie, podczas importowania danych do tabela BCP poleceń i instrukcja BULK INSERT obserwować wszystkie ustawienia domyślne, które są zdefiniowane dla kolumn w tabela.Na przykład jeśli istnieje puste pole w pliku danych, wartością domyślną dla kolumna jest ładowany w zamian.The bcp command and BULK INSERT instrukcja both allow you to specify that nulls values be retained.

Z drugiej strony regularne instrukcja INSERT zachowuje wartość null, zamiast wstawiania wartości domyślnej.INSERT...SELECT * instrukcja FROM OPENROWSET(BULK...) zapewnia podstawowe samo jak zwykłe INSERT, ale dodatkowo obsługuje wskazówkę dotyczącą tabela do wstawiania wartości domyślne.

Uwaga

Do przykładowych plików formatu pominąć kolumna tabela zobacz Using a Format File to Skip a Table Column.

Tabela próbki i pliku danych

Aby uruchamiać przykłady w tym temacie, należy utworzyć plik tabela i dane przykładowe.

Tabela próbki

W przykładach wymagają, aby tabela o nazwie MyTestDefaultCol2 w można utworzyćAdventureWorks przykładowej bazy danych w obszarze dbo schematu.To create this table, in Microsoft SQL Server Management Studio Query Editor, execute:

USE AdventureWorks;
GO
CREATE TABLE MyTestDefaultCol2 
(Col1 smallint,
Col2 nvarchar(50) DEFAULT 'Default value of Col2',
Col3 nvarchar(50) 
);
GO

Powiadomienie, że druga tabela, kolumna, Col2, ma wartość domyślną.

Przykładowy plik formatu

Niektóre przykłady importu zbiorczego korzystają z formatu pliku XML inny niż MyTestDefaultCol2-f-c.Fmt który odpowiada dokładnie do MyTestDefaultCol2 Tabela. Aby utworzyć ten plik formatu na Microsoft Wiersz polecenia systemu Windows, wpisz:

bcp AdventureWorks..MyTestDefaultCol2 format nul -c -f C:\MyTestDefaultCol2-f-c.Fmt -t, -r\n -T

Aby uzyskać więcej informacji na temat tworzenia formatu plików Zobacz Creating a Format File.

Przykładowy plik danych

W przykładzie użyto przykładowy plik danych MyTestEmptyField2-c.Dat, który nie zawiera żadnych wartości w drugim polu. The MyTestEmptyField2-c.Dat data file contains the following records.

1,,DataField3
2,,DataField3

Przechowywanie wartości null bcp lub BULK INSERT

Następujące kwalifikatory określić, że puste pole w pliku danych, zachowuje swoją wartość null podczas operacji importu zbiorczego, a nie dziedziczy wartości domyślnej (jeśli istnieje) dla kolumn tabela.

Polecenie

Kwalifikator

Typ kwalifikator

BCP

-k

Przełącznik

WSTAWIANIA ZBIORCZEGO

KEEPNULLS1

Argument

1 Dla BULK INSERT Jeśli wartości domyślne nie są dostępne, kolumna tabela należy zdefiniować aby zezwolić na wartości null.

Uwaga

Kwalifikatory te należy wyłączyć sprawdzanie DEFAULT definicji tabela za pomocą tych poleceń importu zbiorczego.Jednak dla wszystkich równoczesnych instrukcji INSERT, oczekuje się definicje DEFAULT.

Aby uzyskać więcej informacji zobacz Narzędzie BCP i BULK INSERT (Transact-SQL).

Przykłady

Przykłady w tej sekcji zbiorczej zaimportować za pomocą BCP lub BULK INSERT i zachować wartości null.

Druga kolumna tabela Kol2, ma wartość domyślną.Odpowiednie pole z pliku danych zawiera pusty ciąg.Domyślnie gdy BCP używany jest do importowania danych z tego pliku danych do lub BULK INSERTMyTestDefaultCol2 Wartość domyślna, tabelaKol2 jest wstawiany, produkujących następujący wynik:

1

Default value of Col2

DataField3

2

Default value of Col2

DataField3

Aby wstawić"NULL"zamiast"Default value of Col2", należy użyć -k przełącznika lub KEEPNULL opcji, jak pokazano w następującym BCP i przykłady BULK INSERT.

Za pomocą bcp i aktualizowanie wartości null

Poniższy przykład ilustruje sposób zachować wartości null w BCP polecenia.The bcp command contains the following switches:

Przełącznik

Description

-f

Określa, że polecenie przy użyciu pliku w formacie

-k

Określa, że puste kolumny powinny zachować podczas operacji, a nie ma żadnego domyślne wartości dla kolumn, dodaje wartość null.

-T

Określa, że narzędzie bcp łączy się z SQL Server z zaufane połączenie.

W wiersz polecenia systemu Windows należy wprowadzić.

bcp AdventureWorks..MyTestDefaultCol2 in C:\MyTestEmptyField2-c.Dat -f C:\MyTestDefaultCol2-f-c.Fmt -k -T

Za pomocą BULK INSERT i aktualizowanie wartości null

W poniższym przykładzie przedstawiono sposób użycia opcji KEEPNULLS w instrukcja BULK INSERT.Za pomocą narzędzie kwerendy takie jak SQL Server Management Studio Uruchomić Edytor kwerendy:

USE AdventureWorks;
GO
BULK INSERT MyTestDefaultCol2
   FROM 'C:\MyTestEmptyField2-c.Dat'
   WITH (
      DATAFILETYPE = 'char',
      FIELDTERMINATOR = ',',
      KEEPNULLS
   );
GO

Przechowywanie wartości domyślnych z INSERT...WYBIERZ * Z OPENROWSET(BULK...)

Domyślnie wszystkie kolumny, które nie zostały określone w operacji zbiorczego ładowania są ustawiane na wartość NULL przez INSERT...WYBIERZ * Z OPENROWSET(BULK...).Jednak można określić, że puste pole w pliku danych, odpowiadającej jej kolumna tabela używa wartość domyślną (jeśli istnieje).Aby użyć wartości domyślnych, należy określić następujące wskazówki tabela:

Polecenie

Kwalifikator

Typ kwalifikator

WSTAW...WYBIERZ * Z OPENROWSET(BULK...)

WITH(KEEPDEFAULTS)

Wskazówka tabela

Przykłady

Następujące INSERT...SELECT * FROM OPENROWSET(BULK...) przykład luzem importuje dane i przechowuje wartości domyślne.

Aby uruchomić przykłady, należy utworzyć MyTestDefaultCol2 przykładową tabela MyTestEmptyField2-c.Dat plik danych i wykorzystanie plik formatu MyTestDefaultCol2-f-c.Fmt. Aby uzyskać informacje na temat tworzenia te przykłady zobacz "Przykładowe tabela i plik danych," we wcześniejszej części tego tematu.

Druga kolumna tabela Kol2, ma wartość domyślną.Odpowiednie pole z pliku danych zawiera pusty ciąg.Kiedy INSERT...SELECT * FROM OPENROWSET(BULK...) zaimportować te pola z tego pliku danych do MyTestDefaultCol2 tabela, domyślnie wartość NULL jest wstawiany do Kol2 zamiast wartości domyślne.To zachowanie domyślne daje następujący wynik:

1

NULL

DataField3

2

NULL

DataField3

Aby wstawić wartość domyślną „Default value of Col2", a nie „NULL", trzeba użyć KEEPDEFAULTS tabela wskazówki, jak pokazano w poniższym przykładzie. Za pomocą narzędzie kwerendy takie jak SQL Server Management Studio Uruchomić Edytor kwerendy:

USE AdventureWorks;
GO
INSERT INTO MyTestDefaultCol2
    WITH (KEEPDEFAULTS)
    SELECT *
      FROM OPENROWSET(BULK  'C:\MyTestEmptyField2-c.Dat',
      FORMATFILE='C:\MyTestDefaultCol2-f-c.Fmt'     
      ) as t1 ;
GO