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:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
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ę.
Ważny
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, instrukcja BULK INSERT i dostawca zestawów wierszy zbiorczych OPENROWSET obsługują różne znaki jako terminatory pól lub wierszy i zawsze wyszukują pierwsze wystąpienie każdego terminatora. W poniższej tabeli wymieniono obsługiwane znaki dla terminatorów.
Znak zakończenia | Wskazane przez |
---|---|
Zakładka | \t Jest to domyślny terminator pól. |
Znak nowego wiersza | \n Jest to domyślny terminator wierszy. |
Powrót karetki/kanał liniowy | \r |
Ukośnik odwrotny* | \| |
Terminator o wartości null (nievisible terminator)** | \0 |
Dowolny znak drukowalny (znaki sterujące nie są drukowalne, z wyjątkiem znaku null, tabulacji, znaku nowej linii i powrotu karetki) | (*, A, t, l itd.) |
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-\nitd.) |
*Tylko znaki t, n, r, 0 i "\0" działają ze znakiem ucieczki ukośnika wstecznego, tworząc znak kontrolny.
**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.
Ważny
Jeśli znak terminatora występuje w danych, 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 byłby dobrym wyborem dla terminatora pola, jeśli dane zawierają ten niski zastępca.
Korzystanie z 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. Aby na przykład wygenerować dane wyjściowe tabelaryczne, zakończ ostatnie pole w każdym wierszu znakiem nowego wiersza (\n) oraz 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.
Notatka
Jeśli używasz bcp interaktywnie i określasz \n (nowy wiersz) jako terminator wiersza, bcp automatycznie poprzedza go znakiem \r (powrotu karetki), co skutkuje zakończeniem wiersza \r\n.
Określanie terminatorów 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.
Notatka
Aby uzyskać informacje na temat używania plików formatu, zobacz Format Files for Importing or Export Data (SQL Server).
Bez pliku formatu istnieją następujące alternatywy:
Za pomocą przełącznika -t określ terminator pól dla wszystkich pól z wyjątkiem ostatniego pola w wierszu i używając przełącznika -r, aby określić terminator wierszy.
Używanie przełącznika formatu znaków (-c lub -w) bez użycia przełącznika -t, który ustawia terminator pola na znak tabulatora, \t. Jest to takie samo, jak określanie -t\t.
Notatka
Jeśli określisz przełącznik -n (dane natywne) lub -N (natywny Unicode), terminatory nie są wstawiane.
Jeśli interakcyjne polecenie bcp zawiera opcję in lub out bez przełącznika pliku formatu (-f) lub przełącznika formatu danych (-n, -c, -wlub -N), i nie wybrano określenia długości prefiksu i długości pola, polecenie wywołuje żądanie dla terminatora każdego pola, gdy domyślną jest brak.
Enter field terminator [none]:
Ogólnie rzecz biorąc, wartość domyślna jest odpowiednim wyborem. Jednak w przypadku char lub nchar pól danych, zobacz następującą podsekcję "Wytyczne dotyczące używania terminatorów". Aby uzyskać przykład pokazujący ten monit w kontekście, zobacz Określanie formatów danych pod kątem zgodności podczas korzystania z narzędzia bcp (SQL Server).
Notatka
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 w formacie innych niż XML, zobacz pliki formatujące inne niż 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. Na przykład:
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 wiersza 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. Na przykład:
bcp -r '0x0A'
Przykłady
W tym przykładzie dane są eksportowane zbiorczo z tabeli AdventureWorks.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.
Przełącznik | Opis |
---|---|
-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 nie określono -T, należy 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 AdventureWorks.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ślanie terminatorów 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", wcześniej w tym rozdziale.
WSTAWIANIE ZBIORCZE
Terminatorzy mogą być określeni dla poszczególnych pól w pliku formatu lub dla całego pliku danych za pomocą kwalifikatorów przedstawionych w poniższej tabeli.
Kwalifikator Opis 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 (Transact-SQL).
WSTAWIAĆ... SELECT * FROM OPENROWSET(BULK...)
W przypadku dostawcy dużych zestawów wierszy OPENROWSET terminatory można określić tylko w pliku formatowania (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 BULK OPENROWSET, zobacz OPENROWSET (Transact-SQL).
Określanie \n
jako znacznik końca wiersza dla wczytywania zbiorczego
Po określeniu \n
jako terminatora wierszy do importu zbiorczego lub poprzez niejawne użycie domyślnego terminatora wierszy, bcp i instrukcja BULK INSERT oczekują kombinacji powrotu karetki i zakończenia wiersza (CRLF) jako terminatora wiersza. Jeśli plik źródłowy używa tylko znaku nowej linii (LF) jako znaku końca wiersza — co jest typowe dla plików generowanych na komputerach z systemami Unix i Linux — użyj notacji szesnastkowej, aby określić znak końca wiersza LF. Na przykład w instrukcji BULK INSERT:
ROWTERMINATOR = '0x0A'
Przykłady
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 not NULL CONSTRAINT DF_AddressType_ModifiedDate DEFAULT (GETDATE())
);
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 tematu.
W wierszu polecenia systemu Windows wprowadź:
bcp AdventureWorks2022..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.
Opcja | Atrybut |
---|---|
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 znak końca wiersza jako znak 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