Megosztás a következőn keresztül:


Táblaoszlop kihagyása formátumfájllal (SQL Server)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Ez a cikk azt ismerteti, hogyan hagyhatja ki a táblaoszlop importálását formátumfájl használatával, ha a kihagyott oszlop adatai nem szerepelnek a forrásadatfájlban. Az adatfájlok kevesebb mezőt tartalmazhatnak, mint a céltábla oszlopainak száma – vagyis kihagyhatja az oszlopok importálását – csak akkor, ha a céltáblában az alábbi két feltétel közül legalább az egyik igaz:

  • A kihagyott oszlop null értékű.
  • A kihagyott oszlop alapértelmezett értékkel rendelkezik.

Jegyzet

Ez a szintaxis, beleértve a tömeges beszúrást, nem támogatott az Azure Synapse Analyticsben. Az Azure Synapse Analyticsben és más felhőalapú adatbázisplatform-integrációkban az adatáthelyezést az Azure Data Factory COPY utasításánakvagy T-SQL-utasítások, például a COPY INTO és a PolyBasehasználatával végezheti el.

Mintatábla és adatfájl

A cikkben szereplő példák egy myTestSkipCol nevű táblát várnak a dbo séma alatt. Ezt a táblát létrehozhatja mintaadatbázisban, például WideWorldImporters vagy AdventureWorks vagy bármely más adatbázisban. Hozza létre ezt a táblázatot az alábbiak szerint:

USE WideWorldImporters;
GO

CREATE TABLE myTestSkipCol
(
    Col1 SMALLINT,
    Col2 NVARCHAR (50) NULL,
    Col3 NVARCHAR (50) NOT NULL
);
GO

A cikkben szereplő példák egy mintaadatfájlt is használnak, myTestSkipCol2.dat. Ez az adatfájl csak két mezőt tartalmaz, bár a céltábla három oszlopot tartalmaz.

1,DataForColumn3
1,DataForColumn3
1,DataForColumn3

Alapszintű lépések

A táblázatoszlopok kihagyásához használhat nem XML formátumú fájlokat vagy XML-formátumú fájlokat. Mindkét esetben két lépés van:

  1. Az alapértelmezett formátumfájl létrehozásához használja a bcp parancssori eszközt.
  2. Módosítsa az alapértelmezett formátumfájlt egy szövegszerkesztőben.

A módosított formátumfájlnak le kell képeznie az egyes meglévő mezőket a céltábla megfelelő oszlopára. Azt is meg kell jelölnie, hogy melyik táblaoszlopot vagy oszlopokat hagyja ki.

Ha például tömeges adatimportáláshoz szeretné a myTestSkipCol2.dat adatait a myTestSkipCol táblába importálni, a formátumfájlnak először le kell képeznie az első adatmezőt Col1-re, át kell ugrania Col2-at, majd le kell képeznie a második mezőt Col3-re.

1. lehetőség – Nem XML formátumú fájl használata

1. lépés – Alapértelmezett nem XML formátumú fájl létrehozása

Hozzon létre egy alapértelmezett nem XML formátumú fájlt a myTestSkipCol mintatáblához a következő bcp parancs futtatásával a parancssorban:

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

Fontos

Előfordulhat, hogy meg kell adnia annak a kiszolgálópéldánynak a nevét, amelyhez az -S argumentumhoz csatlakozik. Emellett előfordulhat, hogy meg kell adnia a felhasználónevet és a jelszót a -U és -P argumentumokkal. További információ: bcp Segédprogram.

Az előző parancs létrehoz egy nem XML formátumú fájlt, myTestSkipCol_Default.fmt. Ezt a formátumfájlt alapértelmezett formátumfájlnak nevezzük, mert a bcp által létrehozott űrlap. Az alapértelmezett formátumfájl az adatfájlmezők és a táblaoszlopok közötti egy-az-egyhez egyezést írja le.

Az alábbi képernyőképen a minta alapértelmezett formátumfájljának értékei láthatók.

A mytestskipcol alapértelmezett nem XML formátumú fájljának részleteit bemutató diagram.

Jegyzet

A formátumfájl mezőiről további információt nem XML formátumú fájlok (SQL Server)című témakörben talál.

2. lépés – Nem XML formátumú fájl módosítása

Az alapértelmezett nem XML formátumú fájlok módosításához két alternatíva áll rendelkezésre. Bármelyik másik lehetőség azt jelzi, hogy az adatmező nem létezik az adatfájlban, és nem kell adatokat beszúrni a megfelelő táblaoszlopba.

Táblázatoszlop kihagyásához szerkessze az alapértelmezett nem XML formátumú fájlt, és módosítsa a fájlt az alábbi alternatív módszerek egyikével:

1. lehetőség – A sor eltávolítása

Az oszlop kihagyásának elsődleges módszere a következő három lépésből áll:

  1. Először törölje a forrásadatfájlból hiányzó mezőt leíró formátumfájl-sorokat.
  2. Ezután csökkentse a törölt sorokat követő formátum-fájlsorok "Gazdagépfájl-mezősorrend" értékét. A cél az 1-től -ig-ig terjedő szekvenciális "gazdagépfájl mező sorrend" értékek, amelyek az adatfájl egyes adatmezőinek tényleges pozícióját tükrözik.
  3. Végül csökkentse az "Oszlopok száma" mező értékét, hogy tükrözze az adatfájlban lévő mezők tényleges számát.

Az alábbi példa a myTestSkipCol tábla alapértelmezett formátumfájlján alapul. Ez a módosított formátumfájl leképezi az első adatmezőt Col1, kihagyja Col2, és a második adatmezőt Col3. A Col2 sorát törölték. Az első mező utáni elválasztó is \t-ről ,- ra módosult.

14.0
2
1       SQLCHAR       0       7       ","      1     Col1         ""
2       SQLCHAR       0       100     "\r\n"   3     Col3         SQL_Latin1_General_CP1_CI_AS

2. lehetőség – A sordefiníció módosítása

Másik lehetőségként, ha kihagy egy táblázatoszlopot, módosíthatja a táblaoszlopnak megfelelő formátumfájl sor definícióját. Ebben a formátumfájl sorban az "előtag hossza", a "gazdagépfájl adathossza" és a "kiszolgálóoszlop sorrendje" értékeket 0-ra kell állítani. A "terminátor" és az "oszlopközelítés" mezőt is "" értékre kell állítani (vagyis üres vagy NULL értékre). A "kiszolgálóoszlop neve" értékhez nem üres sztringre van szükség, de a tényleges oszlopnévre nincs szükség. A többi formátummezőhöz az alapértelmezett értékek szükségesek.

Az alábbi példa a myTestSkipCol tábla alapértelmezett formátumfájljából is származik.

14.0
3
1       SQLCHAR       0       7       ","      1     Col1         ""
2       SQLCHAR       0       0       ""       0     Col2         ""
3       SQLCHAR       0       100     "\r\n"   3     Col3         SQL_Latin1_General_CP1_CI_AS

Példák nem XML formátumú fájllal

Az alábbi példák a myTestSkipCol mintatáblán és a cikkben korábban ismertetett myTestSkipCol2.dat mintaadatfájlon alapulnak.

A BULK INSERT használata

Ez a példa az előző szakaszban leírtak szerint létrehozott módosított nem XML formátumú fájlok egyikével működik. Ebben a példában a módosított formátumfájl neve myTestSkipCol2.fmt. Az BULK INSERT használatával tömegesen importálhatja a myTestSkipCol2.dat adatfájlt, futtassa az alábbi kódot az SQL Server Management Studióban (SSMS). Frissítse a fájlrendszer elérési útját a számítógépen található mintafájlok helyéhez.

USE WideWorldImporters;
GO

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

SELECT *
FROM myTestSkipCol;
GO

2. lehetőség – XML formátumú fájl használata

1. lépés – Alapértelmezett XML-formátumfájl létrehozása

Hozzon létre egy alapértelmezett XML-formátumfájlt a myTestSkipCol mintatáblához a következő bcp parancs futtatásával a parancssorban:

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

Fontos

Előfordulhat, hogy meg kell adnia annak a kiszolgálópéldánynak a nevét, amelyhez az -S argumentumhoz csatlakozik. Emellett előfordulhat, hogy meg kell adnia a felhasználónevet és a jelszót a -U és -P argumentumokkal. További információ: bcp Segédprogram.

Az előző parancs létrehoz egy XML formátumú fájlt, myTestSkipCol_Default.xml. Ezt a formátumfájlt alapértelmezett formátumfájlnak nevezzük, mert a bcp által létrehozott űrlap. Az alapértelmezett formátumfájl az adatfájlmezők és a táblaoszlopok közötti egy-az-egyhez egyezést írja le.

<?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="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>

Jegyzet

Az XML-formátumú fájlok szerkezetéről további információt az XML-formátumfájlok (SQL Server) című témakörben talál.

2. lépés – XML-formátumfájl módosítása

Itt látható a módosított XML-formátumfájl, myTestSkipCol2.xml, amely kihagyja Col2. A FIELD bejegyzései közül a ROW és Col2 el lettek távolítva, és a bejegyzéseket újraszámozták. Az első mező utáni elválasztó is \t-ről ,- ra módosult.

<?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="," 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>

Példák XML formátumú fájllal

Az alábbi példák a myTestSkipCol mintatáblán és a cikkben korábban ismertetett myTestSkipCol2.dat mintaadatfájlon alapulnak.

Az adatok myTestSkipCol2.datmyTestSkipCol táblába való importálásához a példák a módosított XML-formátumfájlt használják, myTestSkipCol2.xml.

A TÖMEGES BESZÚRÁS használata nézettel együtt

Xml formátumú fájl esetén nem hagyhat ki oszlopot, ha közvetlenül egy táblába importál egy bcp-parancsot vagy utasítást BULK INSERT . Az importálás a táblázat minden, kivéve az utolsó oszlopába történhet. Ha az utolsó oszloptól eltérő oszlopot kell kihagynia, létre kell hoznia egy nézetet a céltábláról, amely csak az adatfájlban található oszlopokat tartalmazza. Ezután tömegesen importálhat adatokat a fájlból a nézetbe.

Az alábbi példa létrehozza a v_myTestSkipCol nézetet a myTestSkipCol táblában. Ez a nézet kihagyja a második táblaoszlopot, Col2. A példa ezután BULK INSERT használatával importálja a myTestSkipCol2.dat adatfájlt ebbe a nézetbe.

Az SSMS-ben futtassa a következő kódot. Frissítse a fájlrendszer elérési útját a számítógépen található mintafájlok helyéhez.

USE WideWorldImporters;
GO

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

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

Használja az OPENROWSET(BULK...) parancsot

Ha xml formátumú fájllal szeretne kihagyni egy táblaoszlopot OPENROWSET(BULK...)használatával, a kijelölési listában és a céltáblában is meg kell adnia az oszlopok explicit listáját az alábbiak szerint:

INSERT ...<column_list> SELECT <column_list> FROM OPENROWSET(BULK...)

Az alábbi példa a OPENROWSET sorhalmaz-szolgáltatót és a myTestSkipCol2.xml formátumfájlt használja. A példa tömegesen importálja a myTestSkipCol2.dat adatfájlt a myTestSkipCol táblába. Az utasítás szükség szerint a kijelölési listában és a céltáblában lévő oszlopok explicit listáját tartalmazza.

Az SSMS-ben futtassa a következő kódot. Frissítse a fájlrendszer elérési útját a számítógépen található mintafájlok helyéhez.

USE WideWorldImporters;
GO

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