Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:programu SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
punkt końcowy analizy SQL w usłudze Microsoft Fabric
Magazyn w usłudze Microsoft Fabric
Dla pól danych znaków, opcjonalne znaki końcowe pozwalają na oznaczenie końca każdego pola w pliku danych za pomocą terminatora pola i końca każdego wiersza za pomocą terminatora wiersza . Znaki zakończenia są jednym ze sposobów wskazywania programów odczytujących plik danych, w którym kończy się jedno pole lub wiersz, a drugie pole lub wiersz rozpoczyna się.
Important
W przypadku korzystania z natywnego lub natywnego formatu Unicode użyj prefiksów długości, a nie terminatorów pól. Dane formatu natywnego mogą powodować konflikt z terminatorami, ponieważ plik danych w formacie natywnym jest przechowywany w wewnętrznym formacie binarnym programu Microsoft SQL Server.
Znaki obsługiwane jako terminatory
Polecenie bcp, BULK INSERT
instrukcja i OPENROWSET
dostawca zestawów wierszy zbiorczych obsługują różne znaki jako znaczniki końca pól lub wierszy i zawsze wyszukują pierwsze wystąpienie każdego znacznika. W poniższej tabeli wymieniono obsługiwane znaki dla terminatorów.
Terminating character | Indicated by | Description |
---|---|---|
Tab | \t |
Jest to domyślny terminator pól. |
Newline character | \n |
Jest to domyślny terminator wierszy. |
Powrót karetki/kanał liniowy | \r |
|
Backslash 1 | \ |
|
Terminator o wartości null (niewidoczny terminator) 2 | \0 |
|
Dowolny znak drukowalny (znaki kontrolne nie są drukowalne, z wyjątkiem znaku zerowego, tabulacji, nowego wiersza i powrotu karetki) | (* , A , t , l i tak dalej) |
|
Ciąg zawierający maksymalnie 10 znaków nadających się do druku, w tym niektóre lub wszystkie wymienione wcześniej znaki końcowe | (**\t** , end , !!!!!!!!!! , \t-\n i tak dalej) |
1 Tylko znaki t
, n
, r
, 0
oraz \0
działają z znakiem ucieczki, aby utworzyć znak sterujący.
2 Mimo że znak kontrolki o wartości null (\0
) nie jest widoczny podczas drukowania, jest to odrębny znak w pliku danych. Oznacza to, że używanie znaku kontrolki o wartości null jako pola lub terminatora wiersza różni się od braku w ogóle pola ani terminatora wierszy.
Important
Jeśli znak terminatora występuje w danych, znak jest interpretowany jako terminator, a nie jako dane, a dane po tym znaku są interpretowane jako należące do następnego pola lub rekordu. W związku z tym należy starannie wybrać terminatory, aby upewnić się, że nigdy nie pojawiają się w danych. Na przykład niski terminator pola zastępczego nie jest dobrym wyborem dla terminatora pola, jeśli dane zawierają ten niski zastępca.
Używanie terminatorów wierszy
Terminator wiersza może być tym samym znakiem co terminator ostatniego pola. Jednak ogólnie rzecz biorąc, odrębny terminator wiersza jest przydatny. Na przykład, aby wygenerować dane wyjściowe tabelaryczne, zakończ ostatnie pole w każdym wierszu znakiem nowego wiersza (\n
) i wszystkie inne pola znakiem tabulacji (\t
). Aby umieścić każdy rekord danych we własnym wierszu w pliku danych, określ kombinację \r\n
jako terminator wierszy.
Note
Jeśli używasz narzędzia bcp interaktywnie i określasz \n
(nowy wiersz) jako terminator wierszy, narzędzie bcp automatycznie poprzedza go znakiem \r
(powrotu karetki), co powoduje zakończenie wiersza \r\n
.
Określ terminatory dla eksportu zbiorczego
Podczas zbiorczego eksportowania danych char lub nchar i chcesz użyć niestandardowego terminatora, musisz określić terminator w poleceniu bcp. Terminatory można określić na dowolny z następujących sposobów:
Za pomocą pliku formatu, który określa terminator dla każdego pola z osobna.
Note
Aby uzyskać informacje o sposobie używania plików formatu, zobacz Formatowanie plików do importowania lub eksportowania danych (SQL Server).
Bez pliku formatu istnieją następujące alternatywy:
Użyj przełącznika
-t
, aby określić terminator pola dla wszystkich pól z wyjątkiem ostatniego pola w wierszu i przy użyciu przełącznika-r
w celu określenia terminatora wiersza.Użyj przełącznika formatu znaków (
-c
lub-w
) bez przełącznika-t
, który ustawia terminator pola na znak tabulacji\t
. Jest to to samo, co określenie-t\t
.Note
Jeśli określisz przełącznik
-n
(dane natywne) lub-N
(natywny Unicode), terminatory nie zostaną wstawione.Jeśli interakcyjne polecenie bcp zawiera opcję
in
lubout
bez przełącznika pliku formatu (-f
) lub przełącznika formatu danych (-n
,-c
,-w
, lub-N
), i nie chcesz określać długości prefiksu oraz długości pola, polecenie poprosi o zdefiniowanie terminatora dla każdego pola, z domyślną wartością 'brak'.Enter field terminator [none]:
Ogólnie rzecz biorąc, wartość domyślna jest odpowiednim wyborem. Jednak w przypadku pól danych char lub nchar zobacz następującą podsekcję "Wytyczne dotyczące używania terminatorów". Aby zobaczyć przykład pokazujący ten monit w kontekście, zobacz Określanie formatów danych zgodności podczas korzystania z narzędzia bcp (SQL Server).
Note
Po interakcyjnym określeniu wszystkich pól w poleceniu bcp, zostaniesz poproszony o zapisanie odpowiedzi dla każdego pola w pliku w formacie innym niż XML. Aby uzyskać więcej informacji na temat plików formatu innego niż XML, zobacz Use Non-XML format files (SQL Server) (Używanie plików w formacie non-XML (SQL Server).
Wskazówki dotyczące używania terminatorów
W niektórych sytuacjach terminator jest przydatny w przypadku znaku lub nchar pola danych. For example:
W przypadku kolumny danych zawierającej wartość null w pliku danych, który zostanie zaimportowany do programu, który nie rozumie informacji o długości prefiksu.
Każda kolumna danych zawierająca wartość null jest uznawana za zmienną długość. W przypadku braku długości prefiksów terminator jest niezbędny do zidentyfikowania końca pola o wartości null, upewniając się, że dane są prawidłowo interpretowane.
W przypadku długiej kolumny o stałej długości, której przestrzeń jest używana tylko częściowo przez wiele wierszy.
W takiej sytuacji określenie terminatora może zminimalizować ilość miejsca do magazynowania, dzięki czemu pole będzie traktowane jako pole o zmiennej długości.
Określ \n
jako terminator wierszy dla eksportu zbiorczego
Jeśli określisz \n
jako terminator wierszy dla eksportu zbiorczego lub niejawnie użyjesz domyślnego terminatora wierszy, narzędzie bcp wyprowadza kombinację zestawienia wiersza powrotnego karetki (CRLF) jako terminator wiersza. Jeśli chcesz wyświetlić tylko znak przejścia do nowej linii (LF) jako terminator wiersza — co jest typowe na komputerach z systemami Unix i Linux — użyj notacji szesnastkowej, aby określić terminator wiersza LF. For example:
bcp -r '0x0A'
Examples
W tym przykładzie dane są eksportowane zbiorczo z tabeli AdventureWorks2022.HumanResources.Department
do pliku danych Department-c-t.txt
przy użyciu formatu znaków z przecinkiem jako terminatorem pola i znakiem nowego wiersza (\n) jako terminatorem wiersza.
Polecenie bcp zawiera następujące przełączniki.
Switch | Description |
---|---|
-c |
Określa, że pola danych mają być ładowane jako dane znaków. |
-t , |
Określa przecinek (,) jako terminator pola. |
-r \n |
Określa terminator wierszy jako znak przejścia do nowego wiersza. Jest to domyślny terminator wierszy, dlatego określenie go jest opcjonalne. |
-T |
Określa, że narzędzie bcp łączy się z programem SQL Server poprzez zaufane połączenie z wykorzystaniem zintegrowanych mechanizmów uwierzytelniania. Jeśli -T nie zostanie określony, musisz określić -U i -P , aby pomyślnie się zalogować. |
Aby uzyskać więcej informacji, zobacz narzędzie bcp .
W wierszu polecenia systemu Microsoft Windows wprowadź:
bcp AdventureWorks2022.HumanResources.Department out C:\myDepartment-c-t.txt -c -t, -r \n -T
Spowoduje to utworzenie Department-c-t.txt
, który zawiera 16 rekordów z czterema polami. Pola są oddzielone przecinkami.
Określ terminatory dla importu zbiorczego
Podczas zbiorczego importowania danych, takich jak char lub nchar, komenda importu zbiorczego musi rozpoznać terminatory używane w pliku danych. Sposób określenia terminatorów zależy od polecenia importu zbiorczego w następujący sposób:
bcp
Określanie terminatorów dla operacji importowania używa tej samej składni co w przypadku operacji eksportowania. Aby uzyskać więcej informacji, zobacz Określanie terminatorów dla eksportu zbiorczego, we wcześniejszej części tego artykułu.
BULK INSERT
Terminatory można określić dla poszczególnych pól w pliku formatu lub dla całego pliku danych za pomocą kwalifikatorów przedstawionych w poniższej tabeli.
Qualifier Description FIELDTERMINATOR = '<field_terminator>'
Określa terminator pola, który ma być używany dla plików danych znakowych i Unicode.
Wartość domyślna to\t
(znak tabulacji).ROWTERMINATOR = '<row_terminator>'
Określa terminator wiersza, który ma być używany dla plików danych znakowych i Unicode.
Wartość domyślna to\n
(znak nowego wiersza).Aby uzyskać więcej informacji, zobacz BULK INSERT.
INSERT ... SELECT * FROM OPENROWSET(BULK...)
OPENROWSET
W przypadku dostawcy zestawów wierszy zbiorczych terminatory można określić tylko w pliku formatu (który jest wymagany z wyjątkiem typów danych dużych obiektów). Jeśli plik danych znaków używa niedomyślnego terminatora, musi być zdefiniowany w pliku formatu. Aby uzyskać więcej informacji, zobacz Utwórz plik formatu (SQL Server) oraz Użyj pliku formatu do masowego importu danych (SQL Server).Aby uzyskać więcej informacji na temat klauzuli
OPENROWSET BULK
, zobacz OPENROWSET (BULK).
Określ \n
jako terminator wierszy dla importu zbiorczego
Jeśli określisz \n
jako terminator wiersza dla importu zbiorczego lub niejawnie skorzystasz z domyślnego terminatora wiersza, bcp i instrukcja BULK INSERT
oczekują kombinacji CRLF (powrót karetki - nowa linia) jako terminatora wiersza. Jeśli plik źródłowy używa tylko znaku nowej linii (LF) jako terminatora wiersza, co jest typowe w plikach generowanych na komputerach z systemami Unix i Linux, użyj notacji szesnastkowej, aby określić terminator LF. Na przykład w instrukcji BULK INSERT
:
ROWTERMINATOR = '0x0A'
Examples
Przykłady w tej sekcji pokazują, jak zbiorczo importować dane znakowe z pliku danych Department-c-t.txt
utworzonego w poprzednim przykładzie do tabeli myDepartment
w przykładowej bazie danych AdventureWorks2022
. Przed uruchomieniem przykładów należy utworzyć tę tabelę. Aby utworzyć tę tabelę w schemacie dbo
, w Edytorze zapytań programu SQL Server Management Studio wykonaj następujący kod:
USE AdventureWorks2022;
GO
DROP TABLE myDepartment;
CREATE TABLE myDepartment
(
DepartmentID SMALLINT,
Name NVARCHAR (50),
GroupName NVARCHAR (50) NULL,
ModifiedDate DATETIME CONSTRAINT
DF_AddressType_ModifiedDate DEFAULT (GETDATE()) NOT NULL
);
GO
A. Używanie narzędzia bcp do interakcyjnego określania terminatorów
Poniższy przykład zbiorczo importuje plik danych Department-c-t.txt
przy użyciu polecenia bcp
. To polecenie używa tych samych przełączników poleceń co polecenie eksportu zbiorczego. Aby uzyskać więcej informacji, zobacz Określanie terminatorów dla eksportu zbiorczego, we wcześniejszej części tego artykułu.
W wierszu polecenia systemu Windows wpisz następujące polecenie:
bcp AdventureWorks2022.dbo.myDepartment in C:\myDepartment-c-t.txt -c -t , -r \n -T
B. Używanie funkcji BULK INSERT w celu interakcyjnego określania terminatorów
Poniższy przykład zbiorczo importuje plik danych Department-c-t.txt
przy użyciu instrukcji BULK INSERT
, która używa kwalifikatorów pokazanych w poniższej tabeli.
Option | Attribute |
---|---|
DATAFILETYPE = 'char' |
Określa, że pola danych mają być ładowane jako dane znaków. |
FIELDTERMINATOR = ',' |
Określa przecinek (, ) jako terminator pola. |
ROWTERMINATOR = '\n' |
Określa terminator wierszy jako znak przejścia do nowego wiersza. |
W edytorze zapytań programu SQL Server Management Studio wykonaj następujący kod:
USE AdventureWorks2022;
GO
BULK INSERT myDepartment FROM 'C:\myDepartment-c-t.txt'
WITH (
DATAFILETYPE = 'char',
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
);
GO