Udostępnij za pośrednictwem


Zachowaj wartości null lub wartości domyślne podczas importowania zbiorczego (SQL Server)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Domyślnie, gdy dane są importowane do tabeli, polecenie bcp i instrukcja BULK INSERT przestrzegają wszelkich wartości domyślnych zdefiniowanych dla kolumn w tabeli. Jeśli na przykład w pliku danych istnieje pole o wartości null, zamiast tego zostanie załadowana wartość domyślna kolumny. Polecenie bcp i instrukcja BULK INSERT umożliwiają określenie, że wartości null mają być zachowywane.

Z kolei instrukcja regularna INSERT zachowuje wartość null zamiast wstawiać wartość domyślną. INSERT ... SELECT * FROM OPENROWSET BULK zapewnia takie same podstawowe działanie jak zwykłe INSERT, ale dodatkowo obsługuje wskazówkę tabelaryczną dotyczącą wstawiania wartości domyślnych.

Zachowaj wartości null

Poniższe modyfikatory określają, że puste pole w pliku danych zachowuje wartość null podczas operacji zbiorczego importu, a nie odziedziczyła wartości domyślnej (jeśli istnieje) dla kolumn tabeli. W przypadku OPENROWSET BULK, domyślnie wszystkie kolumny, które nie zostały określone w operacji ładowania zbiorczego, są ustawione na wartość NULL.

Polecenie Kwalifikator Typ kwalifikatora
bcp -k Przełącznik
BULK INSERT KEEPNULLS* Kłótnia
INSERT ... SELECT * FROM OPENROWSET(BULK...) N/A N/A

* W przypadku operacji BULK INSERT (Transact-SQL), jeśli wartości domyślne są niedostępne, kolumna tabeli musi być zdefiniowana, aby zezwalać na wartości null.

Notatka

Te kwalifikatory wyłączają sprawdzanie DEFAULT definicji w tabeli za pomocą tych poleceń importu zbiorczego. Jednak w przypadku wszystkich instrukcji INSERT współbieżnych DEFAULT definicje są oczekiwane.

Użyj wartości domyślnych z funkcją INSERT ... SELECT * FROM OPENROWSET BULK

Możesz określić, że dla pustego pola w pliku danych odpowiednia kolumna tabeli używa jego wartości domyślnej (jeśli istnieje). Aby użyć wartości domyślnych, użyj wskazówek dotyczących tabeli.

Aby uzyskać więcej informacji, zobacz OPENROWSET BULK.

Przykładowe warunki testu

W przykładach użyto plików bazy danych i formatu utworzonych w tym artykule.

Zmień lokalną lokalizację pliku przykładowego kodu na lokalizację pliku na maszynie.

Przykładowa tabela

Skrypt tworzy testową bazę danych i tabelę o nazwie myNulls. Czwarta kolumna tabeli , Kidsma wartość domyślną. W programie Microsoft SQL Server Management Studio (SSMS) wykonaj następujący Transact-SQL:

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
   );

Przykładowy plik danych

Za pomocą Notatnika utwórz pusty plik D:\BCP\myNulls.bcp i wstaw następujące przykładowe dane. Nie ma wartości w trzecim rekordzie, czwartej kolumnie.

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

Alternatywnie możesz wykonać następujący skrypt programu PowerShell, aby utworzyć i wypełnić plik danych:

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;

Przykładowy plik formatu innego niż XML

Program SQL Server obsługuje dwa typy plików formatu: format inny niż XML i format XML. Format inny niż XML jest oryginalnym formatem obsługiwanym przez wcześniejsze wersje programu SQL Server. Aby uzyskać więcej informacji, zobacz Użyj plików w formacie innym niż XML (SQL Server).

Następujące polecenie użyje narzędzia bcp do wygenerowania pliku formatu innego niż XML, myNulls.fmtna podstawie schematu myNulls.

  • Aby użyć polecenia bcp w celu utworzenia pliku formatu, określ argument format i użyj nul zamiast ścieżki pliku danych.
  • Opcja formatowania wymaga również opcji -f.
  • c służy do określania danych znaków
  • t, służy do określania przecinka jako terminatora pola
  • T służy do określania zaufanego połączenia przy użyciu zintegrowanych zabezpieczeń.

W wierszu polecenia wprowadź następujące polecenie:

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

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

Ważny

Upewnij się, że plik w formacie innym niż XML kończy się znakiem powrotu karetki i nowej linii. W przeciwnym razie prawdopodobnie zostanie wyświetlony następujący komunikat o błędzie:

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

Aby uzyskać więcej informacji na temat tworzenia plików formatu, zobacz Create a format file with bcp (SQL Server) (Tworzenie pliku formatu za pomocą programu bcp (SQL Server).

Zachowaj wartości null lub użyj wartości domyślnych podczas importowania zbiorczego

W przykładach użyto bazy danych, pliku danych i plików formatu utworzonych w tym artykule.

Użyj narzędzia bcp i zachowaj wartości null bez pliku formatu

Przełącznik -k .

W wierszu polecenia wprowadź następujące polecenie:

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;"

Użyj bcp i zachowaj wartości null przy użyciu pliku formatu nie-XML.

Przełączniki -k i -f .

W wierszu polecenia wprowadź następujące polecenie:

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;"

Użyj bcp i wartości domyślnych bez pliku formatu

W wierszu polecenia wprowadź następujące polecenie:

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;"

Użycie bcp oraz wartości domyślnych z plikiem formatu innym niż XML

Przełącznik -f .

W wierszu polecenia wprowadź następujące polecenie:

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;"

Używanie funkcji BULK INSERT i zachowywanie wartości null bez pliku formatu

Argument KEEPNULLS.

W programie Microsoft SQL Server Management Studio (SSMS) wykonaj następujący Transact-SQL:

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;

Użyj funkcji BULK INSERT i zachowaj wartości null z plikiem formatu innego niż XML

Argument KEEPNULLS i FORMATFILE .

W programie Microsoft SQL Server Management Studio (SSMS) wykonaj następujący Transact-SQL:

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;

Używanie funkcji BULK INSERT i używanie wartości domyślnych bez pliku formatu

W programie Microsoft SQL Server Management Studio (SSMS) wykonaj następujący Transact-SQL:

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;

Używanie funkcji BULK INSERT i wartości domyślnych z plikiem formatu innego niż XML

Argument FORMATFILE.

W programie Microsoft SQL Server Management Studio (SSMS) wykonaj następujący Transact-SQL:

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;

Użyj funkcji OPENROWSET BULK i zachowaj wartości null przy użyciu pliku w formacie innego niż XML

Argument FORMATFILE.

W programie Microsoft SQL Server Management Studio (SSMS) wykonaj następujący Transact-SQL:

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;

Użyj funkcji OPENROWSET BULK i zachowaj wartości domyślne przy użyciu pliku w formacie innego niż XML

Wskazówka KEEPDEFAULTS tabeli i argument FORMATFILE.

W programie Microsoft SQL Server Management Studio (SSMS) wykonaj następujący Transact-SQL:

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;

Aby użyć pliku formatowania

Aby używać formatów danych do importowania zbiorczego lub eksportowania zbiorczego

Aby określić formaty danych pod kątem zgodności podczas korzystania z narzędzia bcp