Udostępnij za pomocą


WKŁADKA ZBIORCZA (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceMagazyn w usłudze Microsoft Fabric

Importuje plik danych do tabeli bazy danych lub widoku w formacie określonym przez użytkownika w programie SQL Server.

Transact-SQL konwencje składni

Składnia

BULK INSERT
   { database_name.schema_name.table_or_view_name | schema_name.table_or_view_name | table_or_view_name }
      FROM 'data_file'
     [ WITH
    (
   [ [ , ] DATA_SOURCE = 'data_source_name' ]

   -- text formatting options
   [ [ , ] CODEPAGE = { 'RAW' | 'code_page' | 'ACP' | 'OEM' } ]
   [ [ , ] DATAFILETYPE = { 'char' | 'widechar' | 'native' | 'widenative' } ]
   [ [ , ] ROWTERMINATOR = 'row_terminator' ]
   [ [ , ] FIELDTERMINATOR = 'field_terminator' ]
   [ [ , ] FORMAT = 'CSV' ]
   [ [ , ] FIELDQUOTE = 'quote_characters' ]
   [ [ , ] FIRSTROW = first_row ]
   [ [ , ] LASTROW = last_row ]

   -- input file format options
   [ [ , ] FORMATFILE = 'format_file_path' ]
   [ [ , ] FORMATFILE_DATA_SOURCE = 'data_source_name' ]

   -- error handling options
   [ [ , ] MAXERRORS = max_errors ]
   [ [ , ] ERRORFILE = 'file_name' ]
   [ [ , ] ERRORFILE_DATA_SOURCE = 'errorfile_data_source_name' ]

   -- database options
   [ [ , ] KEEPIDENTITY ]
   [ [ , ] KEEPNULLS ]
   [ [ , ] FIRE_TRIGGERS ]
   [ [ , ] CHECK_CONSTRAINTS ]
   [ [ , ] TABLOCK ]

   -- source options
   [ [ , ] ORDER ( { column [ ASC | DESC ] } [ , ...n ] ) ]
   [ [ , ] ROWS_PER_BATCH = rows_per_batch ]
   [ [ , ] KILOBYTES_PER_BATCH = kilobytes_per_batch ]
   [ [ , ] BATCHSIZE = batch_size ]

    ) ]
BULK INSERT
   { database_name.schema_name.table_or_view_name | schema_name.table_or_view_name | table_or_view_name }
      FROM 'data_file'
     [ WITH
    (
   [ [ , ] DATA_SOURCE = 'data_source_name' ]

   -- text formatting options
   [ [ , ] CODEPAGE = { 'code_page' | 'ACP' } ]
   [ [ , ] DATAFILETYPE = { 'char' | 'widechar' } ]
   [ [ , ] ROWTERMINATOR = 'row_terminator' ]
   [ [ , ] FIELDTERMINATOR = 'field_terminator' ]
   [ [ , ] FORMAT = { 'CSV' | 'PARQUET' } ]
   [ [ , ] FIELDQUOTE = 'quote_characters' ]
   [ [ , ] FIRSTROW = first_row ]
   [ [ , ] LASTROW = last_row ]

   -- input file format options
   [ [ , ] FORMATFILE = 'format_file_path' ]
   [ [ , ] FORMATFILE_DATA_SOURCE = 'data_source_name' ]

   -- error handling options
   [ [ , ] MAXERRORS = max_errors ]
   [ [ , ] ERRORFILE = 'file_name' ]
   [ [ , ] ERRORFILE_DATA_SOURCE = 'errorfile_data_source_name' ]

    ) ]

Argumenty

Instrukcja BULK INSERT ma różne argumenty i opcje na różnych platformach. Różnice zostały podsumowane w poniższej tabeli:

Cecha SQL Server Usługi Azure SQL Database i Azure SQL Managed Instance Magazyn danych sieci szkieletowej
Źródło danych Ścieżka lokalna, ścieżka sieciowa (UNC) lub usługa Azure Storage Azure Storage Azure Storage, One Lake
Uwierzytelnianie źródłowe Uwierzytelnianie systemu Windows, sygnatura dostępu współdzielonego Microsoft Entra ID, token SAS, tożsamość zarządzana Microsoft Entra ID
Nieobsługiwane opcje * Dzikie karty w ścieżce, FORMAT = 'PARQUET' * Dzikie karty w ścieżce, FORMAT = 'PARQUET' DATAFILETYPE = {'native' | 'widenative'}
Włączone opcje, ale bez efektu KEEPIDENTITY, FIRE_TRIGGERS, , , CHECK_CONSTRAINTSTABLOCKORDERROWS_PER_BATCHKILOBYTES_PER_BATCH, i BATCHSIZE nie mają zastosowania. Nie zgłaszają błędu składniowego, ale nie mają żadnego efektu

database_name

Nazwa bazy danych, w której znajduje się określona tabela lub widok. Jeśli nie zostanie określony, database_name jest bieżącą bazą danych.

schema_name

Określa nazwę tabeli lub schematu widoku. schema_name jest opcjonalny, jeśli domyślny schemat dla użytkownika wykonującego operację importowania zbiorczego jest schematem określonej tabeli lub widoku. Jeśli schemat nie zostanie określony, a domyślny schemat użytkownika wykonującego operację importowania zbiorczego różni się od określonej tabeli lub widoku, program SQL Server zwraca komunikat o błędzie, a operacja importowania zbiorczego zostanie anulowana.

table_name

Określa nazwę tabeli lub widoku do zbiorczego importowania danych. Można używać tylko widoków, w których można odwoływać się do tej samej tabeli bazowej. Aby uzyskać więcej informacji na temat ograniczeń ładowania danych do widoków, zobacz INSERT.

OD 'data_file'

Określa pełną ścieżkę pliku danych zawierającego dane do zaimportowania do określonej tabeli lub widoku.

BULK INSERT może importować dane z dysku lub Azure Storage (w tym sieci, dyskietek, dysków twardych itd.).

BULK INSERT bing_covid_19_data
FROM 'C:\\bing_covid-19_data\public\curated\covid-19\latest\bing_covid-19_data.csv';

data_file musi określić prawidłową ścieżkę z serwera, na którym działa program SQL Server. Jeśli data_file jest plikiem zdalnym, określ nazwę Universal Naming Convention (UNC). Nazwa UNC ma postać \\SystemName\ShareName\Path\FileName. Na przykład:

BULK INSERT bing_covid_19_data
FROM '\\ShareX\bing_covid-19_data\public\curated\covid-19\latest\bing_covid-19_data.csv';

Azure SQL Database i Fabric Data Warehouse obsługują odczyt danych z URI, ale nie obsługują lokalnych ścieżek do plików.

BULK INSERT bing_covid_19_data
FROM 'https://<data-lake>.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv';

Począwszy od SQL Server 2017 (14.x), data_file może być w Azure Storage. W takim przypadku należy również określić opcję data_source_name. Dla przykładu, zobacz Import danych z pliku w Azure Storage.

Tissue Data Warehouse obsługuje dwa różne style ścieżek do określania ścieżki źródłowej:

  • https://<storage account>.blob.core.windows.net/<container name>/<path to file>
  • abfss://<container name>@<storage account>.dfs.core.windows.net/<path to file>

Fabric Data Warehouse obsługuje * karty dzikie, które mogą pasować do dowolnego znaku w URI i umożliwiają zdefiniowanie wzorca URI dla plików, które powinny być importowane. Na przykład:

BULK INSERT bing_covid_19_data
FROM 'https://<data-lake>.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/*.csv';

Nuta

Zastąp <data-lake>.blob.core.windows.net ciąg odpowiednim adresem URL.

ŹRÓDŁO_DANYCH

Dotyczy do: SQL Server 2017 (14.x) i nowszych wersji, Azure SQL Database oraz Warehouse w Microsoft Fabric.

Określa nazwane zewnętrzne źródło danych, które wskazuje na lokalizację root Azure Storage dla importu pliku.

CREATE EXTERNAL DATA SOURCE pandemicdatalake
WITH (LOCATION = 'https://<data-lake>.blob.core.windows.net/public/');

Nuta

Zastąp <data-lake>.blob.core.windows.net ciąg odpowiednim adresem URL.

Aby uzyskać więcej informacji, zobacz CREATE EXTERNAL DATA SOURCE.

Ścieżka pliku w klauzuli FROM musi być ścieżką względną, która zostanie dodana do lokalizacji korzeniowej zdefiniowanej w zewnętrznym źródle danych.

BULK INSERT bing_covid_19_data
FROM 'curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv'
WITH (DATA_SOURCE = 'pandemicdatalake', FIRSTROW = 2, LASTROW = 100, FIELDTERMINATOR = ',');

Nuta

Dla uproszczenia poniższe przykłady wykorzystują ścieżki względne i zdefiniowane zewnętrzne źródła danych.

STRONA KODOWA

Określa stronę kodów danych w pliku danych. CODEPAGE ma zastosowanie tylko wtedy, gdy dane zawierają kolumny char, varchar lub text z wartościami znaków większymi lub mniejszymi niż 12732. Aby zapoznać się z przykładem, zobacz Określanie strony kodowej.

BULK INSERT bing_covid_19_data
FROM '/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv'
WITH (DATA_SOURCE = 'pandemicdatalake', FIRSTROW = 2, CODEPAGE = '65001');

CODEPAGE nie jest obsługiwaną opcją w systemie Linux dla programu SQL Server 2017 (14.x). W przypadku programu SQL Server 2019 (15.x) dozwolona 'RAW'CODEPAGEjest tylko opcja .

Należy określić nazwę sortowania dla każdej kolumny w pliku formatu .

CODEPAGE wartość Opis
ACP Kolumny char, varcharlub tekst typu danych są konwertowane ze strony kodowej ANSI/Microsoft Windows (ISO 1252) na stronę kodową programu SQL Server.
OEM (ustawienie domyślne) Kolumny typu danych char, varchar lub text są konwertowane ze strony kodowej systemu OEM na stronę kodowaną programu SQL Server.
RAW Nie ma konwersji z jednej strony kodu na inną. RAW jest najszybszą opcją.
code_page Określony numer strony kodowej, na przykład 850.

Wersje przed programem SQL Server 2016 (13.x) nie obsługują strony kodowej 65001 (kodowanie UTF-8).
CODEPAGE wartość Opis
ACP Kolumny char, varcharlub tekst typu danych są konwertowane ze strony kodowej ANSI/Microsoft Windows (ISO 1252) na stronę kodową programu SQL Server.
code_page Określony numer strony kodowej, na przykład 850.

Wersje przed programem SQL Server 2016 (13.x) nie obsługują strony kodowej 65001 (kodowanie UTF-8).

TYP PLIKU DANYCH

Określa, że BULK INSERT wykonuje operację importowania przy użyciu określonej wartości typu pliku danych.

BULK INSERT bing_covid_19_data
FROM 'curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv'
WITH (DATA_SOURCE = 'pandemicdatalake', FIRSTROW = 2, DATAFILETYPE = 'char');

Nuta

Zastąp <data-lake>.blob.core.windows.net ciąg odpowiednim adresem URL.

DATAFILETYPE wartość Wszystkie dane reprezentowane w programie
char (ustawienie domyślne) Format znaku.

Więcej informacji można znaleźć w artykule Użyj formatu znaków do importu lub eksportu danych.
widechar Znaki Unicode.

Więcej informacji można znaleźć w artykule Użyj formatu znaków Unicode do importu lub eksportu danych.
native Natywne (bazy danych) typy danych. Utwórz plik danych natywnych przez zbiorcze importowanie danych z programu SQL Server przy użyciu narzędzia bcp.

Wartość natywna oferuje wyższą wydajność alternatywną dla wartości char. Format natywny jest zalecany w przypadku zbiorczego transferu danych między wieloma wystąpieniami programu SQL Server przy użyciu pliku danych, który nie zawiera żadnych znaków zestawu znaków rozszerzonych/dwubajtowych (DBCS).

Więcej informacji można znaleźć w artykule Użyj formatu natywnego do importu lub eksportu danych.
widenative Natywne (bazy danych) typy danych, z wyjątkiem char , varchari kolumn tekstowych, w których dane są przechowywane jako Unicode. widenative Utwórz plik danych przez zbiorcze importowanie danych z programu SQL Server przy użyciu narzędzia bcp.

Wartość widenative oferuje lepszą wydajność alternatywną dla widecharelementu . Jeśli plik danych zawiera znaki rozszerzone ANSI, określ wartość widenative.

Więcej informacji można znaleźć w artykule Użyj natywnego formatu Unicode do importu lub eksportu danych.
DATAFILETYPE wartość Wszystkie dane reprezentowane w programie
char (ustawienie domyślne) Format znaku.

Więcej informacji można znaleźć w artykule Użyj formatu znaków do importu lub eksportu danych.
widechar Znaki Unicode.

Więcej informacji można znaleźć w artykule Użyj formatu znaków Unicode do importu lub eksportu danych.

MAXERRORS

Określa maksymalną liczbę błędów składni dozwolonych w danych przed anulowaniem operacji zbiorczego importowania. Każdy wiersz, którego nie można zaimportować przez operację importowania zbiorczego, jest ignorowany i liowany jako jeden błąd. Jeśli max_errors nie zostanie określona, wartość domyślna to 10.

BULK INSERT bing_covid_19_data
FROM 'curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv'
WITH (DATA_SOURCE = 'pandemicdatalake', MAXERRORS = 0);

Opcja nie MAX_ERRORS dotyczy kontroli ograniczeń ani konwersji pieniędzy i typów danych bigint .

PLIK BŁĘDU

Określa plik używany do zbierania wierszy, które mają błędy formatowania i nie można przekonwertować na zestaw wierszy OLE DB. Te wiersze są kopiowane do tego pliku błędu z pliku danych "tak, jak to jest".

BULK INSERT bing_covid_19_data
FROM 'curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv'
WITH (DATA_SOURCE = 'pandemicdatalake',
      ERRORFILE = 'https://<data-lake>.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/errors');

Nuta

Zastąp <data-lake>.blob.core.windows.net ciąg odpowiednim adresem URL.

Plik błędu jest tworzony podczas wykonywania polecenia. Błąd występuje, jeśli plik już istnieje. Ponadto jest tworzony plik kontrolny z rozszerzeniem .ERROR.txt , który odwołuje się do każdego wiersza w pliku błędu i zapewnia diagnostykę błędów. Po skorygowaniu błędów można załadować dane.

Począwszy od SQL Server 2017 (14.x), error_file_path może być dostępny w Azure Storage.

ŹRÓDŁO_DANYCH_PLIKU_BŁĘDÓW

Dotyczy: SQL Server 2017 (14.x) i nowsze wersje.

Określa nazwane zewnętrzne źródło danych wskazujące na lokalizację Azure Storage pliku błędu, aby śledzić błędy wykryte podczas importu.

BULK INSERT bing_covid_19_data
FROM 'curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv'
WITH (
    DATA_SOURCE = 'pandemicdatalake',
    ERRORFILE = 'curated/covid-19/bing_covid-19_data/latest/errors',
    ERRORFILE_DATA_SOURCE = 'pandemicdatalake'
);

Więcej szczegółów na temat tworzenia zewnętrznych źródeł danych można znaleźć w artykule CREATE EXTERNAL DATA SOURCE.

PIERWSZY RZĄD

Określa liczbę pierwszego wiersza do załadowania. Wartość domyślna to pierwszy wiersz w określonym pliku danych. FIRSTROW jest oparty na 1.

BULK INSERT bing_covid_19_data
FROM 'curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv'
WITH (DATA_SOURCE = 'pandemicdatalake', FIRSTROW = 2);

Atrybut FIRSTROW nie jest przeznaczony do pomijania nagłówków kolumn. Instrukcja BULK INSERT nie obsługuje pomijania nagłówków. Jeśli zdecydujesz się pominąć wiersze, aparat bazy danych programu SQL Server sprawdza tylko terminatory pól i nie weryfikuje danych w polach pominiętych wierszy.

OSTATNI RZĄD

Określa liczbę ostatniego wiersza do załadowania. Wartość domyślna to 0, która wskazuje ostatni wiersz w określonym pliku danych.

BATCH SIZE

Określa liczbę wierszy w partii. Każda partia jest kopiowana na serwer jako jedna transakcja. Jeśli to się nie powiedzie, program SQL Server zatwierdzi lub wycofa transakcję dla każdej partii. Domyślnie wszystkie dane w określonym pliku danych są jedną partią. Aby uzyskać informacje o zagadnieniach dotyczących wydajności, zobacz Zagadnienia dotyczące wydajności w dalszej części tego artykułu.

KONTROLA_OGRANICZEŃ

Określa, że wszystkie ograniczenia w tabeli docelowej lub widoku muszą być sprawdzane podczas operacji importowania zbiorczego. CHECK_CONSTRAINTS Bez opcji żadne CHECK ograniczenia i FOREIGN KEY są ignorowane, a po operacji ograniczenie w tabeli jest oznaczone jako niezauważone.

UNIQUE i PRIMARY KEY ograniczenia są zawsze wymuszane. Podczas importowania do kolumny znaków zdefiniowanej NOT NULL za pomocą ograniczenia wstawia pusty ciąg, BULK INSERT gdy w pliku tekstowym nie ma żadnej wartości.

W pewnym momencie należy zbadać ograniczenia dotyczące całej tabeli. Jeśli tabela nie była pusta przed operacją importowania zbiorczego, koszt ponownego zmiany ograniczenia może przekroczyć koszt stosowania CHECK ograniczeń do danych przyrostowych.

Sytuacja, w której mogą być wyłączone ograniczenia (zachowanie domyślne), to jeśli dane wejściowe zawierają wiersze naruszające ograniczenia. Przy CHECK wyłączonych ograniczeniach można zaimportować dane, a następnie użyć instrukcji Transact-SQL, aby usunąć nieprawidłowe dane.

Nuta

Opcja MAXERRORS nie ma zastosowania do sprawdzania ograniczeń.

WYZWALACZE_POŻARU

Określa, że wszystkie wyzwalacze wstawiania zdefiniowane w tabeli docelowej są wykonywane podczas operacji importowania zbiorczego. Jeśli wyzwalacze są zdefiniowane dla INSERT operacji w tabeli docelowej, są wyzwalane dla każdej ukończonej partii.

Jeśli FIRE_TRIGGERS nie zostanie określony, nie są wykonywane wyzwalacze wstawiania.

KEEPIDENTITY

Określa, że wartość tożsamości lub wartości w zaimportowanych plikach danych mają być używane dla kolumny tożsamości. Jeśli KEEPIDENTITY nie zostanie określony, wartości tożsamości dla tej kolumny są weryfikowane, ale nie są importowane, a program SQL Server automatycznie przypisuje unikatowe wartości na podstawie wartości inicjacji i przyrostów określonych podczas tworzenia tabeli. Jeśli plik danych nie zawiera wartości kolumny tożsamości w tabeli lub widoku, użyj pliku formatu, aby określić, że kolumna tożsamości w tabeli lub widoku ma zostać pominięta podczas importowania danych; Program SQL Server automatycznie przypisuje unikatowe wartości dla kolumny. Aby uzyskać więcej informacji, zobacz DBCC CHECKIDENT.

Więcej informacji można znaleźć w artykule o zachowaniu wartości identyfikacyjnych w artykule Zachowaj wartości tożsamości podczas masowego importu danych.

KEEPNULL

Określa, że puste kolumny powinny zachować wartość null podczas operacji importowania zbiorczego, zamiast mieć jakiekolwiek wartości domyślne dla wstawionych kolumn. Więcej informacji można znaleźć w artykule Zachowaj wartości zerowe lub domyślne podczas importu masowego.

KILOBYTES_PER_BATCH

Określa przybliżoną liczbę kilobajtów (KB) danych na partię jako kilobytes_per_batch. Domyślnie KILOBYTES_PER_BATCH jest nieznany. Aby uzyskać informacje o zagadnieniach dotyczących wydajności, zobacz Zagadnienia dotyczące wydajności w dalszej części tego artykułu.

ORDER

Określa sposób sortowania danych w pliku danych. Wydajność importowania zbiorczego jest lepsza, jeśli importowane dane są sortowane zgodnie z indeksem klastrowanym w tabeli, jeśli istnieją. Jeśli plik danych jest sortowany w kolejności innej niż kolejność klastrowanego klucza indeksu lub jeśli w tabeli nie ma indeksu klastrowanego, klauzula ORDER jest ignorowana. Podane nazwy kolumn muszą być prawidłowymi nazwami kolumn w tabeli docelowej. Domyślnie operacja wstawiania zbiorczego zakłada, że plik danych jest nieurządzony. W przypadku zoptymalizowanego importu zbiorczego program SQL Server sprawdza również, czy zaimportowane dane są sortowane.

n jest symbolem zastępczym wskazującym, że można określić wiele kolumn.

ROWS_PER_BATCH

Wskazuje przybliżoną liczbę wierszy danych w pliku danych.

Domyślnie wszystkie dane w pliku danych są wysyłane do serwera jako pojedyncza transakcja, a liczba wierszy w partii jest nieznana optymalizatorowi zapytań. Jeśli określisz ROWS_PER_BATCH wartość (z wartością > 0), serwer użyje tej wartości do zoptymalizowania operacji importowania zbiorczego. Wartość określona dla ROWS_PER_BATCH elementu powinna być w przybliżeniu taka sama jak rzeczywista liczba wierszy. Aby uzyskać informacje o zagadnieniach dotyczących wydajności, zobacz Zagadnienia dotyczące wydajności w dalszej części tego artykułu.

TABLOCK

Określa, że blokada na poziomie tabeli jest uzyskiwana przez czas trwania operacji importowania zbiorczego. Tabelę można załadować współbieżnie przez wielu klientów, jeśli tabela nie ma indeksów i TABLOCK jest określona. Domyślnie zachowanie blokowania jest określane przez opcję tabeli blokada tabeli podczas ładowania zbiorczego. Utrzymywanie blokady na czas trwania operacji importowania zbiorczego zmniejsza rywalizację o blokadę w tabeli, w niektórych przypadkach może znacznie poprawić wydajność. Aby uzyskać informacje o zagadnieniach dotyczących wydajności, zobacz Zagadnienia dotyczące wydajności w dalszej części tego artykułu.

W przypadku indeksu magazynu kolumn zachowanie blokowania jest inne, ponieważ jest wewnętrznie podzielone na wiele zestawów wierszy. Każdy wątek ładuje dane wyłącznie do każdego zestawu wierszy, stosując wyłączną blokadę (X) na zestawie wierszy, umożliwiając równoległe ładowanie danych z równoczesnymi sesjami ładowania danych. Użycie TABLOCK opcji powoduje, że wątek stosuje blokadę wyłączną w tabeli (w przeciwieństwie do blokady aktualizacji zbiorczej (BU) dla tradycyjnych zestawów wierszy, co uniemożliwia innym współbieżnym wątkom ładowanie danych współbieżnie.

Opcje formatu pliku wejściowego

FORMAT

Dotyczy: SQL Server 2017 (14.x) i nowsze wersje.

Określa plik wartości rozdzielonych przecinkami zgodny ze standardem RFC 4180.

BULK INSERT bing_covid_19_data
FROM 'curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv'
WITH (DATA_SOURCE = 'pandemicdatalake', FORMAT = 'CSV');

W Fabric Data Warehouse oświadczenie BULK INSERT obsługuje te same formaty co oświadczenie COPY INTO , więc FORMAT = 'PARQUET' również jest obsługiwane.

FIELDQUOTE

Dotyczy: SQL Server 2017 (14.x) i nowsze wersje.

Określa znak, który ma być używany jako znak cudzysłowu w pliku CSV. Jeśli nie zostanie określony, znak cudzysłowu (") jest używany jako znak cudzysłowu, zgodnie z definicją w standardzie RFC 4180 .

FORMATFILE

Określa pełną ścieżkę pliku formatu. Plik formatu opisuje plik danych zawierający przechowywane odpowiedzi utworzone przy użyciu narzędzia bcp w tej samej tabeli lub widoku.

BULK INSERT bing_covid_19_data
FROM 'curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv'
WITH (DATA_SOURCE = 'pandemicdatalake',
      FORMATFILE = 'https://<data-lake>.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.fmt');

Nuta

Zastąp <data-lake>.blob.core.windows.net ciąg odpowiednim adresem URL.

Plik formatu powinien być używany, jeśli:

  • Plik danych zawiera kolumny większe lub mniejsze niż tabela lub widok.
  • Kolumny są w innej kolejności.
  • Ograniczniki kolumn różnią się.
  • Istnieją inne zmiany w formacie danych. Pliki formatu są zwykle tworzone przy użyciu narzędzia bcp i modyfikowane za pomocą edytora tekstów zgodnie z potrzebami. Więcej informacji można znaleźć w sekcji bcp Utility oraz Create a format file with bcp.

Począwszy od SQL Server 2017 (14.x), a w Azure SQL Database format_file_path można znaleźć się w Azure Storage.

FORMATFILE_DATA_SOURCE

Dotyczy: SQL Server 2017 (14.x) i nowsze wersje.

Określa nazwane zewnętrzne źródło danych wskazujące na lokalizację Azure Storage pliku formatu, aby zdefiniować schemat importowanych danych.

BULK INSERT bing_covid_19_data
FROM 'curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv'
WITH (
    DATA_SOURCE = 'pandemicdatalake',
    FORMATFILE = 'curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.fmt',
    FORMATFILE_DATA_SOURCE = 'pandemicdatalake'
);

FIELDTERMINATOR

Określa terminator pola, który ma być używany dla char plików widechar danych. Domyślny terminator pola to \t (znak tabulacji). Aby uzyskać więcej informacji, zobacz Określanie terminatorów pól i wierszy.

BULK INSERT bing_covid_19_data
FROM '/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv'
WITH (DATA_SOURCE = 'pandemicdatalake', FIELDTERMINATOR = ',', FIRSTROW = 2);

ROWTERMINATOR

Określa terminator wiersza, którego należy używać dla char plików widechar danych.

BULK INSERT bing_covid_19_data
FROM '/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv'
WITH (DATA_SOURCE = 'pandemicdatalake', ROWTERMINATOR = '\r\n', FIRSTROW = 2);

Domyślnym terminatorem \r\n wiersza jest (powrót powrotu i znak nowej linii). Aby uzyskać więcej informacji, zobacz Określanie terminatorów pól i wierszy.

Zgodność

BULK INSERT Wymusza ścisłą walidację danych i sprawdzanie danych odczytanych z pliku, co może spowodować niepowodzenie istniejących skryptów po wykonaniu nieprawidłowych danych. Na przykład sprawdza, BULK INSERT czy:

  • Natywne reprezentacje zmiennoprzecinkowych lub rzeczywistych typów danych są prawidłowe.
  • Dane Unicode mają długość parzystową.

Typy danych

Konwersje typu danych ciąg-dziesiętny

Konwersje typu danych ciąg-dziesiętne używane w BULK INSERT programie są zgodne z tymi samymi regułami co funkcja Transact-SQL CONVERT , która odrzuca ciągi reprezentujące wartości liczbowe, które używają notacji naukowej. BULK INSERT W związku z tym traktuje takie ciągi jak nieprawidłowe wartości i zgłasza błędy konwersji.

Aby obejść to zachowanie, użyj pliku formatu, aby zbiorczo zaimportować notację naukową zmiennoprzecinkowe danych do kolumny dziesiętnej. W pliku formatu jawnie opisz kolumnę jako rzeczywistych lub danych zmiennoprzecinkowych. Aby uzyskać więcej informacji na temat tych typów danych, zobacz float i real.

Pliki formatu reprezentują rzeczywiste dane jako typ danych SQLFLT4 i dane zmiennoprzecinkowe jako typ danych SQLFLT8. Aby uzyskać informacje o plikach niebędących formatami XML, zobacz Określ typ pamięci plikowej za pomocą bcp.

Przykład importowania wartości liczbowej korzystającej z notacji naukowej

W tym przykładzie użyto następującej tabeli w bazie danych bulktest:

CREATE TABLE dbo.t_float
(
    c1 FLOAT,
    c2 DECIMAL (5, 4)
);

Użytkownik chce zbiorczo zaimportować dane do tabeli t_float. Plik danych , C:\t_float-c.datzawiera dane zmiennoprzecinkowe notacji naukowej, na przykład:

8.0000000000000002E-2 8.0000000000000002E-2

Podczas kopiowania tego przykładu należy pamiętać o różnych edytorach tekstów i kodowaniu, które zapisują znaki tabulatorów (\t) jako spacje. W dalszej części tego przykładu oczekiwano znaku tabulatora.

BULK INSERT Nie można jednak zaimportować tych danych bezpośrednio do t_floatobiektu , ponieważ jego druga kolumna c2używa typu danych dziesiętnych. W związku z tym wymagany jest plik formatu. Plik formatu musi mapować notację naukową danych zmiennoprzecinkowych do formatu dziesiętnego kolumny c2.

Poniższy plik formatu używa typu danych SQLFLT8 do mapowania drugiego pola danych na drugą kolumnę:

<?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="\t" MAX_LENGTH="30" />
    <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="30" />
  </RECORD>
  <ROW>
    <COLUMN SOURCE="1" NAME="c1" xsi:type="SQLFLT8" />
    <COLUMN SOURCE="2" NAME="c2" xsi:type="SQLFLT8" />
  </ROW>
</BCPFORMAT>

Aby użyć tego pliku formatu (przy użyciu nazwy pliku C:\t_floatformat-c-xml.xml) w celu zaimportowania danych testowych do tabeli testowej, wydaj następującą instrukcję Transact-SQL:

BULK INSERT bulktest.dbo.t_float
FROM 'C:\t_float-c.dat'
WITH (FORMATFILE = 'C:\t_floatformat-c-xml.xml');

Ważny

Azure SQL Database oraz Fabric Data Warehouse obsługują tylko odczyt z URI (na przykład Azure Storage).

Typy danych do zbiorczego eksportowania lub importowania dokumentów SQLXML

Aby zbiorczo wyeksportować lub zaimportować dane SQLXML, użyj jednego z następujących typów danych w pliku formatu:

Typ danych Efekt
SQLCHAR lub SQLVARCHAR Dane są wysyłane na stronie kodu klienta lub na stronie kodowej implikowanej przez sortowanie). Efekt jest taki sam jak określanie DATAFILETYPE = 'char' bez określania pliku formatu.
SQLNCHAR lub SQLNVARCHAR Dane są wysyłane jako Unicode. Efekt jest taki sam jak określanie DATAFILETYPE = 'widechar' bez określania pliku formatu.
SQLBINARY lub SQLVARBIN Dane są wysyłane bez żadnej konwersji.

Uwagi

Aby porównać BULK INSERT instrukcje, INSERT ... SELECT * FROM OPENROWSET(BULK...) instrukcje i bcp polecenie, zobacz Import i eksport danych hurtowo.

Aby uzyskać informacje na temat przygotowywania danych do importowania zbiorczego, zobacz Przygotowywanie danych do eksportu lub importowania zbiorczego.

Instrukcję BULK INSERT można wykonać w ramach transakcji zdefiniowanej przez użytkownika w celu zaimportowania danych do tabeli lub widoku. Opcjonalnie, aby użyć wielu dopasowań do zbiorczego importowania danych, transakcja może określić klauzulę BATCHSIZE w instrukcji BULK INSERT . Jeśli transakcja wielokrotnego wsadu zostanie wycofana, każda partia, którą transakcja wysłana do programu SQL Server zostanie wycofana.

Współdziałanie

Importowanie danych z pliku CSV

Począwszy od programu SQL Server 2017 (14.x), BULK INSERT obsługuje format CSV, podobnie jak usługa Azure SQL Database.

Przed programem SQL Server 2017 (14.x) pliki wartości rozdzielanych przecinkami (CSV) nie są obsługiwane przez operacje importowania zbiorczego programu SQL Server. Jednak w niektórych przypadkach plik CSV może służyć jako plik danych do zbiorczego importowania danych do programu SQL Server. Aby uzyskać informacje o wymaganiach dotyczących importowania danych z pliku danych CSV, zobacz Przygotowywanie danych do eksportu lub importowania zbiorczego.

Zachowanie dziennika

Aby uzyskać informacje o tym, kiedy operacje wstawiania wierszy wykonywane przez importowanie zbiorcze do programu SQL Server są rejestrowane w dzienniku transakcji, zobacz Wymagania wstępne dotyczące minimalnego rejestrowania w importowaniu zbiorczym. Minimalne rejestrowanie nie jest obsługiwane w usłudze Azure SQL Database.

Ograniczenia

W przypadku używania pliku formatu z BULK INSERTprogramem można określić maksymalnie 1024 pola. Jest to takie samo, jak maksymalna liczba kolumn dozwolonych w tabeli. Jeśli używasz pliku formatu z BULK INSERT plikiem danych zawierającym więcej niż 1024 pola, BULK INSERT generuje błąd 4822. Narzędzie bcp nie ma tego ograniczenia, więc w przypadku plików danych zawierających więcej niż 1024 pól użyj BULK INSERT bez pliku formatu lub użyj polecenia bcp .

Zagadnienia dotyczące wydajności

Jeśli liczba stron do opróżnienia w pojedynczej partii przekroczy próg wewnętrzny, może wystąpić pełne skanowanie puli w celu zidentyfikowania stron do opróżnienia po zatwierdzeniu partii. To pełne skanowanie może zaszkodzić wydajności importowania zbiorczego. Prawdopodobny przypadek przekroczenia progu wewnętrznego występuje, gdy duża pula jest połączona z powolnym podsystemem we/wy. Aby uniknąć przepełnienia buforu na dużych maszynach, nie używaj TABLOCK wskazówki (która usuwa optymalizacje zbiorcze) lub użyj mniejszego rozmiaru partii (który zachowuje optymalizacje zbiorcze).

Należy przetestować różne rozmiary partii z obciążeniem danych, aby dowiedzieć się, co działa najlepiej. Należy pamiętać, że rozmiar partii ma częściowe konsekwencje wycofania. Jeśli proces zakończy się niepowodzeniem i przed ponownym użyciem BULK INSERT , może być konieczne wykonanie dodatkowej pracy ręcznej w celu usunięcia części wierszy, które zostały wstawione pomyślnie, przed wystąpieniem błędu.

W przypadku usługi Azure SQL Database rozważ tymczasowe zwiększenie poziomu wydajności bazy danych lub wystąpienia przed zaimportowaniem, jeśli importujesz dużą ilość danych.

Zabezpieczenia

Delegowanie konta zabezpieczeń (personifikacja)

Jeśli użytkownik używa identyfikatora logowania programu SQL Server, używany jest profil zabezpieczeń konta procesu programu SQL Server. Nie można uwierzytelnić logowania przy użyciu uwierzytelniania programu SQL Server poza aparatem bazy danych. W związku z tym, gdy BULK INSERT polecenie jest inicjowane przez logowanie przy użyciu uwierzytelniania programu SQL Server, połączenie z danymi odbywa się przy użyciu kontekstu zabezpieczeń konta procesu programu SQL Server (konta używanego przez usługę aparatu bazy danych programu SQL Server).

Aby pomyślnie odczytać dane źródłowe, musisz przyznać konto używane przez aparat bazy danych programu SQL Server, dostęp do danych źródłowych. Natomiast jeśli użytkownik programu SQL Server loguje się przy użyciu uwierzytelniania systemu Windows, użytkownik może odczytywać tylko te pliki, do których można uzyskać dostęp przy użyciu konta użytkownika, niezależnie od profilu zabezpieczeń procesu programu SQL Server.

Podczas wykonywania instrukcji BULK INSERT przy użyciu narzędzia sqlcmd lub osql z jednego komputera wstawianie danych do programu SQL Server na drugim komputerze i określanie data_file na trzecim komputerze przy użyciu ścieżki UNC może zostać wyświetlony błąd 4861.

Aby rozwiązać ten problem, użyj uwierzytelniania programu SQL Server i określ identyfikator logowania programu SQL Server, który używa profilu zabezpieczeń konta procesu programu SQL Server, lub skonfiguruj system Windows w celu włączenia delegowania konta zabezpieczeń. Aby uzyskać informacje na temat włączania zaufanego konta użytkownika na potrzeby delegowania, zobacz Pomoc systemu Windows.

Aby uzyskać więcej informacji o tym i innych zagadnieniach dotyczących zabezpieczeń dotyczących używania programu BULK INSERT, zobacz Importowanie danych do programu SQL Server za pomocą funkcji BULK INSERT lub OPENROWSET(BULKSET...).

Podczas importu z Azure Storage, gdy dane nie są publiczne (dostęp anonimowy), stwórz DATABASE SCOPED CREDENTIAL na podstawie klucza SAS zaszyfrowanego kluczem głównym bazy danych (DMK), a następnie stwórz zewnętrzne źródło bazy danych do użycia w twoim BULK INSERT poleceniu.

Alternatywnie utwórz DATABASE SCOPED CREDENTIAL na podstawie MANAGED IDENTITY autoryzowania żądań dostępu do danych na kontach magazynu niepublikowego. Podczas korzystania MANAGED IDENTITYz , Azure Storage musi przyznać uprawnienia do zarządzanej tożsamości instancji, dodając wbudowaną rolę kontroli dostępu opartej na rolach Azure (RBAC) w Azure Blob Data Contributor , która zapewnia dostęp do odczytu/zapisu do zarządzanej tożsamości dla niezbędnych kontenerów Azure Storage. Usługa Azure SQL Managed Instance ma przypisaną przez system tożsamość zarządzaną i może również mieć co najmniej jedną tożsamość zarządzaną przypisaną przez użytkownika. Do autoryzowania żądań można użyć tożsamości zarządzanych przypisanych przez system lub tożsamości zarządzanych przypisanych przez użytkownika. W przypadku autoryzacji default tożsamość wystąpienia zarządzanego będzie używana (czyli podstawowa tożsamość zarządzana przypisana przez użytkownika lub tożsamość zarządzana przypisana przez system, jeśli nie określono tożsamości zarządzanej przypisanej przez użytkownika). Dla przykładu, zobacz Import danych z pliku w Azure Storage.

Ważny

Managed Identity dotyczy Azure SQL oraz SQL Server 2025 (17.x) i późniejszych wersji.

Uprawnienia

Następujące uprawnienia dotyczą lokalizacji, w której dane są importowane zbiorczo (miejsce docelowe).

Wymaga INSERT i ADMINISTER BULK OPERATIONS uprawnienia. W usłudze Azure SQL Database INSERT i ADMINISTER DATABASE BULK OPERATIONS wymagane są uprawnienia. ADMINISTER BULK OPERATIONS uprawnienia lub rola bulkadmin nie jest obsługiwana dla programu SQL Server w systemie Linux. Tylko sysadmin może wykonywać operacje wstawiania zbiorczego dla programu SQL Server w systemie Linux.

Ponadto uprawnienie jest wymagane, ALTER TABLE jeśli spełniony jest co najmniej jeden z następujących warunków:

  • Ograniczenia istnieją, a CHECK_CONSTRAINTS opcja nie jest określona.

    Wyłączenie ograniczeń jest zachowaniem domyślnym. Aby jawnie sprawdzić ograniczenia, użyj CHECK_CONSTRAINTS opcji .

  • Wyzwalacze istnieją, a FIRE_TRIGGER opcja nie jest określona.

    Domyślnie wyzwalacze nie są wyzwalane. Aby jawnie uruchamiać wyzwalacze, użyj FIRE_TRIGGER opcji .

  • Możesz użyć opcji importowania KEEPIDENTITY wartości tożsamości z pliku danych.

Przykłady

Przykłady kodu w tym artykule korzystają z przykładowej bazy danych AdventureWorks2025 lub AdventureWorksDW2025, którą można pobrać ze strony głównej Przykładów programu Microsoft SQL Server i projektów społeczności.

Ważny

Azure SQL Database i Fabric Warehouse obsługują tylko odczyt z Azure Storage.

Odp. Importowanie danych z pliku przy użyciu potoków

Poniższy przykład importuje szczegółowe informacje o kolejności do tabeli AdventureWorks2022.Sales.SalesOrderDetail z określonego pliku danych przy użyciu potoku (|) jako terminatora pola i |\n jako terminator wiersza.

BULK INSERT AdventureWorks2022.Sales.SalesOrderDetail
FROM 'f:\orders\lineitem.tbl'
WITH (FIELDTERMINATOR = ' |', ROWTERMINATOR = ' |\n');

B. Użyj argumentu FIRE_TRIGGERS

W poniższym przykładzie określono argument FIRE_TRIGGERS.

BULK INSERT AdventureWorks2022.Sales.SalesOrderDetail
FROM 'f:\orders\lineitem.tbl'
WITH (FIELDTERMINATOR = ' |', ROWTERMINATOR = ':\n', FIRE_TRIGGERS);

C. Używanie kanału informacyjnego wiersza jako terminatora wierszy

W poniższym przykładzie importuje plik, który używa kanału informacyjnego wiersza jako terminatora wiersza, takiego jak dane wyjściowe systemu UNIX:

DECLARE @bulk_cmd AS VARCHAR (1000);

SET @bulk_cmd = 'BULK INSERT AdventureWorks2022.Sales.SalesOrderDetail
FROM ''<drive>:\<path>\<filename>''
WITH (ROWTERMINATOR = ''' + CHAR(10) + ''')';

EXECUTE (@bulk_cmd);

Nuta

W systemie Windows \n element jest automatycznie zastępowany elementem \r\n.

D. Określanie strony kodowej

W poniższym przykładzie pokazano, jak określić stronę kodową.

BULK INSERT MyTable
FROM 'D:\data.csv'
WITH (CODEPAGE = '65001', DATAFILETYPE = 'char', FIELDTERMINATOR = ',');

E. Importowanie danych z pliku CSV

W poniższym przykładzie pokazano, jak określić plik CSV, pomijając nagłówek (pierwszy wiersz), używając ; jako terminatora pól i 0x0a jako terminator wiersza:

BULK INSERT Sales.Invoices
FROM '\\share\invoices\inv-2016-07-25.csv'
WITH (
    FORMAT = 'CSV',
    FIRSTROW = 2,
    FIELDQUOTE = '\',
    FIELDTERMINATOR = ';',
    ROWTERMINATOR = '0x0a'
);

W poniższym przykładzie pokazano, jak określić plik CSV w formacie UTF-8 (przy użyciu CODEPAGE65001), pomijając nagłówek (pierwszy wiersz), używając ; jako terminatora pola i 0x0a jako terminator wiersza:

BULK INSERT Sales.Invoices
FROM '\\share\invoices\inv-2016-07-25.csv'
WITH (
    CODEPAGE = '65001',
    FORMAT = 'CSV',
    FIRSTROW = 2,
    FIELDQUOTE = '\',
    FIELDTERMINATOR = ';',
    ROWTERMINATOR = '0x0a'
);

F. Import danych z pliku w Azure Storage

Załaduj dane z pliku CSV w Azure Storage za pomocą tokena SAS

Poniższy przykład pokazuje, jak załadować dane z pliku CSV w lokalizacji Azure Storage, na której utworzyłeś Shared Access Signature (SAS). Lokalizacja Azure Storage jest skonfigurowana jako zewnętrzne źródło danych, co wymaga poświadczenia o skali bazy danych za pomocą klucza SAS zaszyfrowanego za pomocą DMK w bazie użytkowników.

Nuta

Upewnij się, że nie masz wiodącego ? tokena w tokenie SAS i że masz przynajmniej uprawnienia do odczytu obiektu, który powinien być załadowany srt=o&sp=r, oraz że ten okres ważności jest ważny (wszystkie daty są w czasie UTC).

(Opcjonalnie) DMK nie jest wymagane, jeśli nie DATABASE SCOPED CREDENTIAL jest wymagane, ponieważ blob jest skonfigurowany do publicznego (anonimowego) dostępu.

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';

(Opcjonalnie) A DATABASE SCOPED CREDENTIAL nie jest wymagane, ponieważ blob jest skonfigurowany do publicznego (anonimowego) dostępu.

Nie dodawaj wiodącej ? liczby do tokena SAS. Upewnij się, że masz przynajmniej uprawnienia do odczytu obiektu, który powinien być załadowany (srt=o&sp=r), oraz że okres wygaśnięcia jest ważny (wszystkie daty są w czasie UTC).

CREATE DATABASE SCOPED CREDENTIAL MyAzureBlobStorageCredential
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
     SECRET = '******srt = sco&sp = rwac&se = 2017-02-01T00:55:34Z&st = 2016-12-29T16:55:34Z***************';

Nuta

CREDENTIAL nie jest wymagany, jeśli blob jest skonfigurowany do publicznego (anonimowego) dostępu.

CREATE EXTERNAL DATA SOURCE MyAzureBlobStorage
WITH (
    TYPE = BLOB_STORAGE,
    LOCATION = 'https://****************.blob.core.windows.net/invoices',
    CREDENTIAL = MyAzureBlobStorageCredential
);

BULK INSERT Sales.Invoices
FROM 'inv-2017-12-08.csv'
WITH (DATA_SOURCE = 'MyAzureBlobStorage');

Załaduj dane z pliku CSV w Azure Storage z tożsamością zarządzaną

Poniższy przykład pokazuje, jak użyć BULK INSERT polecenia do załadowania danych z pliku CSV w lokalizacji Azure Storage za pomocą Managed Identity. Lokalizacja Azure Storage jest skonfigurowana jako zewnętrzne źródło danych.

(Opcjonalnie) DMK nie jest wymagane, jeśli nie DATABASE SCOPED CREDENTIAL jest wymagane, ponieważ blob jest skonfigurowany do publicznego (anonimowego) dostępu.

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';

(Opcjonalnie) A DATABASE SCOPED CREDENTIAL nie jest wymagane, ponieważ blob jest skonfigurowany do publicznego (anonimowego) dostępu:

CREATE DATABASE SCOPED CREDENTIAL MyAzureBlobStorageCredential
WITH IDENTITY = 'Managed Identity';

Nadaj rolę Storage Blob Data Contributor, aby zapewnić dostęp do odczytu/zapisu do zarządzanej tożsamości dla niezbędnych kontenerów Azure Storage.

Nuta

CREDENTIAL nie jest wymagany, jeśli blob jest skonfigurowany do publicznego (anonimowego) dostępu.

CREATE EXTERNAL DATA SOURCE MyAzureBlobStorage
WITH (
    TYPE = BLOB_STORAGE,
    LOCATION = 'https://****************.blob.core.windows.net/invoices',
    CREDENTIAL = MyAzureBlobStorageCredential
);

BULK INSERT Sales.Invoices
FROM 'inv-2017-12-08.csv'
WITH (DATA_SOURCE = 'MyAzureBlobStorage');

Ważny

Zarządzana tożsamość dotyczy SQL Server 2025 (17.x) i nowszych wersji, a także Azure SQL.

G. Importuj dane z pliku w Azure Storage i wybierz plik błędu

Poniższy przykład pokazuje, jak załadować dane z pliku CSV w lokalizacji Azure Storage, która jest skonfigurowana jako zewnętrzne źródło danych, a także określa plik błędu. Potrzebujesz poświadczeń o zakresie bazy danych przy użyciu sygnatury dostępu współdzielonego. Jeśli działasz na bazie danych Azure SQL, ERRORFILE opcja powinna być opatrzona , ERRORFILE_DATA_SOURCEw przeciwnym razie import może się nie powiódć z błędem uprawnień. Plik określony w pliku ERRORFILE nie powinien istnieć w kontenerze.

BULK INSERT Sales.Invoices
FROM 'inv-2017-12-08.csv'
WITH (
    DATA_SOURCE = 'MyAzureInvoices',
    FORMAT = 'CSV',
    ERRORFILE = 'MyErrorFile',
    ERRORFILE_DATA_SOURCE = 'MyAzureInvoices'
);

Pełne BULK INSERT przykłady, w tym konfiguracja danych uwierzytelniających i zewnętrznego źródła danych, można znaleźć w Przykładach masowego dostępu do danych w Azure Storage.

Więcej przykładów

Inne przykłady BULK INSERT znajdują się w następujących artykułach: