Using a Format File to Skip a Table Column

W tym temacie opisano format plików.plik formatu służy do pominięcia importowania kolumna tabela, gdy pole nie istnieje w pliku danych.Plik danych może zawierać mniej pól niż liczba kolumn w tabela tylko wtedy, gdy są pominięte kolumny dopuszczającej i/lub wartość domyślna.

Tabela próbki i pliku danych

W poniższych przykładach wymagają tabela o nazwie myTestSkipCol w AdventureWorks Przykładowa baza danych w obszarze dbo schematu.W tej tabela należy utworzyć w następujący sposób:

USE AdventureWorks;
GO
CREATE TABLE myTestSkipCol 
   (
   Col1 smallint,
   Col2 nvarchar(50) NULL,
   Col3 nvarchar(50) not NULL
   );
GO

W następujących przykładach użyto przykładowy plik danych myTestSkipCol2.dat, który zawiera tylko dwa pola, w odpowiedniej tabela zawiera trzy kolumny:

1,DataForColumn3
1,DataForColumn3
1,DataForColumn3

Do importowania danych z luzem myTestSkipCol2.dat do myTestSkipCol tabela, plik formatu musi być mapowane do pierwszego pola danych Col1, drugie pole do Col3, pomijanie Col2.

Przy użyciu innych niż XML plik formatu

Można zmodyfikować plik formatu XML inny niż pominąć kolumna tabela.Zazwyczaj to polega na użyciu BCP narzędzie, aby utworzyć plik formatu XML inny niż domyślny i modyfikowanie domyślnego pliku w dokumencie edytora.Zmodyfikowany plik formatu należy mapowania wszystkich istniejących pól do jego odpowiednią kolumna tabela i wskazać kolumna tabela lub kolumna, aby pominąć.Istnieje dwóch rozwiązań alternatywnych do modyfikowania pliku danych XML inny niż domyślny.Alternatywne albo wskazuje, że pole danych nie istnieje w pliku danych, i że żadne dane nie zostaną wstawione w odpowiedniej kolumnie tabela.

Tworzenie default non-XML plik formatu

W tym temacie wykorzystuje plik formatu XML inny niż domyślny, który został utworzony dla myTestSkipCol przykładową tabela przy użyciu następujących BCP command:

bcp AdventureWorks..myTestSkipCol format nul -f myTestSkipCol_Default.fmt -c -T

Poprzednie polecenie tworzy plik formatu XML inny niż myTestSkipCol_Default.fmt. Ten plik formatu nosi nazwę domyślny plik formatu ponieważ jest to formularz, generowany przez BCP.Zazwyczaj plik formatu domyślnym opisuje odpowiedniooci jeden-do-jednego między polami w pliku danych i kolumn tabela.

Security noteSecurity Note:

Trzeba określić nazwę wystąpienie serwera, z którym chcesz się połączyć.Ponadto trzeba określić nazwę użytkownika i hasłoAby uzyskać więcej informacji zobaczNarzędzie BCP.

Na następującej ilustracji pokazano wartości tej próbki domyślny format plików.Na ilustracji pokazano również nazwę każdego pole pliku w formacie.

default non-XML format file for myTestSkipCol

Uwaga

Aby uzyskać więcej informacji na temat pól pliku formatu Zobacz Understanding Non-XML Format Files.

Metody modyfikacja pliku formatu innych niż XML

Aby pominąć kolumna tabela, edytować plik formatu XML inny niż domyślny, a następnie zmodyfikować plik przy użyciu jednej z następujących metod alternatywne:

  • Preferowana metoda polega na trzy podstawowe kroki.Najpierw należy usunąć każdy wiersz pliku w formacie, opisujący pole, które Brak w pliku danych.Następnie należy zmniejszyć wartość "" host kolejność pole w pliku"każdego pliku w formacie wiersza, znajdującą się do usuniętego wiersza.Cel jest równy kolejne "host kolejność pole w pliku „ wartości 1 do n, które odzwierciedlają rzeczywiste położenie każdego pole danych w pliku danych.Wreszcie Zmniejsz wartość pole "Liczba kolumn", aby odzwierciedlić rzeczywista liczba pole w pliku danych.

    Poniższy przykład jest oparty na domyślny plik formatu myTestSkipColTabela, która jest tworzona w "Creating a XML nie format plik domyślny," we wcześniejszej części tego tematu. Ten plik formatu zmodyfikowanych mapuje do pierwszego pole danych Col1, pomija Col2i drugi danych pole do mapy Col3. Wiersz Col2 został usunięty. Inne modyfikacje są wskazywane pogrubioną czcionką:

    9.0
    2
    1       SQLCHAR       0       7       "\t"     1     Col1         ""
    2       SQLCHAR       0       100     "\r\n"   3     Col3         SQL_Latin1_General_CP1_CI_AS
    
  • Można również pominąć kolumna tabela, można zmodyfikować definicję wiersza pliku w formacie, który odpowiada kolumnie tabela.W wierszu tego pliku w formacie „ długość prefiksu „ "host długość pliku danych, serwer"i"kolumna zamówienia" wartości muszą być ustawione na 0.Ponadto "terminator" i "kolumna sortowanie" pól musi być ustawiony na „"(NULL).

    Wartość "Nazwa kolumna serwera" wymaga ciąg niepustych, chociaż nazwa rzeczywistej kolumna nie jest konieczne.Pozostałe pola format wymaga wartości domyślne.

    W poniższym przykładzie również jest określany na podstawie domyślnego plik formatu dla myTestSkipCol Tabela. Wartości, które musi wynosić 0 lub wartości NULL są oznaczane czcionką pogrubioną.

    9.0
    3
    1       SQLCHAR       0       7       "\t"     1     Col1         ""
    2       SQLCHAR       00""0     Col2         ""
    3       SQLCHAR       0       100     "\r\n"   3     Col3         SQL_Latin1_General_CP1_CI_AS
    

Przykłady

W poniższych przykładach zależą także od myTestSkipCol przykładową tabela i myTestSkipCol2.datPrzykładowy plik danych, które zostały utworzone w "Przykładową tabela i plik danych," we wcześniejszej części tego tematu.

Za pomocą BULK INSERT

W tym przykładzie działa przy użyciu formatu utworzone w "Metody dla modyfikowanie a non-XML plik formatu," pliki w formacie zmodyfikowanych-XML inny niż we wcześniejszej części tego tematu.W tym przykładzie zmodyfikowany plik formatu o nazwie C:\myTestSkipCol2.fmt. Aby użyć BULK INSERT do import zbiorczy myTestSkipCol2.dat dane pliku, SQL Server Management Studio Edytor kwerend wykonać następujący kod:

USE AdventureWorks;
GO
BULK INSERT myTestSkipCol 
   FROM 'C:\myTestSkipCol2.dat' 
   WITH (FORMATFILE = 'C:\myTestSkipCol2.fmt');
GO
SELECT * FROM myTestSkipCol;
GO

Za pomocą XML plik formatu

Z XML plik formatu, można pominąć kolumna podczas importowania bezpośrednio do tabela za pomocą BCP polecenie lub instrukcja BULK INSERT.Można jednak zaimportować do wszystkie oprócz ostatniej kolumna tabela.Jeśli masz pominąć żadnych ale ostatniej kolumna, należy utworzyć widok zawierający kolumna, w pliku danych w tabela miejsce docelowe.Następnie importowania danych z tego pliku może zbiorczej w widoku.

Aby użyć XML plik formatu pominąć kolumna tabela przy użyciu OPENROWSET(BULK...), musisz podać jawne listy kolumn, zaznacz na liście, a także w tabela miejsce docelowe w następujący sposób:

WSTAW... <column_list> WYBIERZ OPCJĘ <column_list> Z OPENROWSET(BULK...)

Tworzenie pliku domyślnego formatu XML

Przykłady zmodyfikowanych plików są oparte na myTestSkipColPrzykładowy plik tabela i dane, utworzone w "Przykładowe tabela i plik danych," we wcześniejszej części tego tematu. Poniżej BCP polecenie tworzy domyślny plik formatu XML dla myTestSkipCol Tabela:

bcp AdventureWorks..myTestSkipCol format nul -f myTestSkipCol_Default.xml -c -x -T

Wynikowy plik formatu XML inny niż domyślny opisuje odpowiedniooci jeden-do-jednego między polami w pliku danych i kolumny tabela, jak następuje:

<?xml version="1.0"?>
<BCPFORMAT xmlns="https://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="7"/>
  <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
 </RECORD>
 <ROW>
  <COLUMN SOURCE="1" NAME="Col1" xsi:type="SQLSMALLINT"/>
  <COLUMN SOURCE="2" NAME="Col2" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="3" NAME="Col3" xsi:type="SQLNVARCHAR"/>
 </ROW>
</BCPFORMAT>

Uwaga

Aby uzyskać informacje na temat struktury plików w formacie XML zobacz Understanding XML Format Files.

Przykłady

W przykładach w niniejszej sekcji użycia myTestSkipCol przykładową tabela i myTestSkipCol2.datPrzykładowy plik danych, które zostały utworzone w "Przykładową tabela i plik danych," we wcześniejszej części tego tematu. Aby importować dane z myTestSkipCol2.dat do myTestSkipCol Tabela, w przykładach użyto następującego zmodyfikowanego plik formatu XML, myTestSkipCol2-x.xml. To zależy od pliku w formacie, który jest tworzony w "Creating a domyślny plik formatu XML," we wcześniejszej części tego tematu.

<?xml version="1.0"?>
<BCPFORMAT xmlns="https://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <RECORD>
  <FIELD ID="1" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="7"/>
  <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
 </RECORD>
 <ROW>
  <COLUMN SOURCE="1" NAME="Col1" xsi:type="SQLSMALLINT"/>
  <COLUMN SOURCE="2" NAME="Col3" xsi:type="SQLNVARCHAR"/>
 </ROW>
</BCPFORMAT>

Za pomocą OPENROWSET(BULK...)

W poniższym przykładzie użyto OPENROWSET dostawca zbiorczych zestawów zestaw wierszy i myTestSkipCol2.xml plik formatu. Importuje zbiorczej przykład myTestSkipCol2.dat w pliku danych myTestSkipCol Tabela. Instrukcja zawiera listę jawne kolumn na liście select, a także w tabela miejsce docelowe, zgodnie z wymaganiami.

W SQL Server Management Studio Edytor kwerendy wykonaj następujący kod:

USE AdventureWorks;
GO
INSERT INTO myTestSkipCol
  (Col1,Col3)
    SELECT Col1,Col3
      FROM  OPENROWSET(BULK  'C:\myTestSkipCol2.Dat',
      FORMATFILE='C:\myTestSkipCol2.Xml'  
       ) as t1 ;
GO

Za pomocą import zbiorczy w widoku

Poniższy przykład tworzy v_myTestSkipCol na myTestSkipCol Tabela. W tym widoku pomija drugiej kolumnie tabela Col2. W przykładzie używa BULK INSERT Aby zaimportować myTestSkipCol2.dat plik danych w tym widoku.

W SQL Server Management Studio Edytor kwerendy wykonaj następujący kod:

CREATE VIEW v_myTestSkipCol AS
    SELECT Col1,Col3
    FROM myTestSkipCol;
GO

USE AdventureWorks;
GO
BULK INSERT v_myTestSkipCol
FROM 'C:\myTestSkipCol2.dat'
WITH (FORMATFILE='C:\myTestSkipCol2.xml');
GO