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


sp_describe_first_result_set (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példányAzure Synapse AnalyticsElemzési platformrendszer (PDW)SQL Analytics-végpont a Microsoft FabricbenRaktár a Microsoft FabricbenSQL-adatbázis a Microsoft Fabricben

A Transact-SQL köteg első lehetséges eredményhalmazának metaadatait adja vissza. Üres eredményhalmazt ad vissza, ha a köteg nem ad eredményül. Hibát jelez, ha az adatbázismotor nem tudja meghatározni az első, statikus elemzéssel végrehajtandó lekérdezés metaadatait. A dinamikus felügyeleti nézet sys.dm_exec_describe_first_result_set ugyanazokat az információkat adja vissza.

Transact-SQL szintaxis konvenciói

Szintaxis

sp_describe_first_result_set [ @tsql = ] N'tsql'
    [ , [ @params = ] N'@parameter_name data_type [ , ... n ]' ]
    [ , [ @browse_information_mode = ] <tinyint> ]
[ ; ]

Érvek

Fontos

A kiterjesztett tárolt eljárások argumentumait a Szintaxis szakaszban leírt sorrendben kell megadni. Ha a paraméterek sorrenden kívül vannak beírva, hibaüzenet jelenik meg.

[ @tsql = ] 'tsql'

Egy vagy több Transact-SQL utasítás. @tsql lehet nvarchar(n) vagy nvarchar(max).

[ @params = ] N'@parameter_namedata_type [ , ... n ]'

@params deklarációs sztringet biztosít a Transact-SQL köteg paramétereihez, amely hasonló a sp_executesql. A paraméterek lehetnek nvarchar(n) vagy nvarchar(max).

Egy sztring, amely a @tsqlbeágyazott összes paraméter definícióját tartalmazza. A sztringnek Unicode-állandónak vagy Unicode-változónak kell lennie. Minden paraméterdefiníció egy paraméternévből és egy adattípusból áll. n egy helyőrző, amely további paraméterdefiníciókat jelez. Az utasításban megadott paramétereket @paramskell definiálni. Ha az utasításban szereplő Transact-SQL utasítás vagy köteg nem tartalmaz paramétereket, @params nincs szükség. NULL a paraméter alapértelmezett értéke.

[ @browse_information_mode = ] apró

Megadja, hogy a rendszer visszaadja-e a további kulcsoszlopokat és a forrástábla adatait. Ha 1értékre van állítva, a rendszer úgy elemzi az egyes lekérdezéseket, mintha egy FOR BROWSE lehetőséget tartalmaz a lekérdezéshez.

  • Ha 0értékre van állítva, a rendszer nem ad vissza információt.

  • Ha 1értékre van állítva, a rendszer úgy elemzi az egyes lekérdezéseket, mintha egy FOR BROWSE lehetőséget tartalmaz a lekérdezéshez. Ez az alaptáblaneveket adja vissza forrásoszlop-információként.

  • Ha 2értékre van állítva, a rendszer minden lekérdezést úgy elemez, mintha a kurzor előkészítéséhez vagy végrehajtásához használná. Ez a nézetneveket forrásoszlop-információként adja vissza.

Kódértékek visszaadása

sp_describe_first_result_set mindig nullás állapotot ad vissza a sikerhez. Ha az eljárás hibát jelez, és az eljárást RPC-nek nevezzük, a visszatérési állapotot a sys.dm_exec_describe_first_result_seterror_type oszlopában leírt hibatípus tölti ki. Ha az eljárást Transact-SQL-ből hívjuk meg, a visszatérési érték mindig nulla, még akkor is, ha hiba történik.

Eredményhalmaz

Ez a gyakori metaadatok eredményhalmazként lesznek visszaadva, és az eredmény metaadatainak minden oszlopához egy sor tartozik. Minden sor az oszlop típusát és nullképességét írja le a következő szakaszban leírt formátumban. Ha az első utasítás nem létezik minden vezérlőútvonalhoz, a rendszer nulla sorokkal rendelkező eredményhalmazt ad vissza.

Oszlop neve Adattípus Leírás
is_hidden bit Azt jelzi, hogy az oszlop egy további oszlop, amelyet böngészési információk céljából adtak hozzá, és hogy valójában nem jelenik meg az eredményhalmazban. Nem null értékű.
column_ordinal Az eredményhalmaz oszlopának sorszámát tartalmazza. Az első oszlop helye 1. Nem null értékű.
name sysname Az oszlop nevét tartalmazza, ha meghatározható a név. Ellenkező esetben NULLtartalmaz. Nullázható.
is_nullable bit Az 1 értéket tartalmazza, ha az oszlop engedélyezi NULL, 0 ha az oszlop nem engedélyezi NULL, és 1, ha az oszlop engedélyezi NULL. Nem null értékű.
system_type_id Az oszlop adattípusának system_type_id tartalmazza a sys.types. CLR-típusok esetén annak ellenére, hogy a system_type_name oszlop NULLad vissza, ez az oszlop a 240értéket adja vissza. Nem null értékű.
system_type_name nvarchar(256) Az oszlop adattípusához megadott nevet és argumentumokat (például hossz, pontosság, skálázás) tartalmazza. Ha az adattípus egy felhasználó által definiált aliastípus, a mögöttes rendszertípus itt van megadva. Ha ez egy felhasználó által definiált CLR-típus, NULL jelenik meg ebben az oszlopban. Nullázható.
max_length kis Az oszlop maximális hossza (bájtban kifejezve).

-1 = Az oszlop adattípusa varchar(max), nvarchar(max), varbinary(max)vagy xml.

Ha szöveg oszlopot, a max_length érték 16 vagy a sp_tableoption 'text in row'által beállított érték. Nem null értékű.
precision apró Az oszlop pontossága numerikus alapú esetén. Ellenkező esetben 0ad vissza. Nem null értékű.
scale apró Oszlopméret, ha numerikus alapú. Ellenkező esetben 0ad vissza. Nem null értékű.
collation_name sysname Az oszlop rendezési neve, ha karakteralapú. Ellenkező esetben NULLad vissza. Nullázható.
user_type_id CLR- és aliastípusok esetén az oszlop adattípusának user_type_id tartalmazza a sys.types. Ellenkező esetben NULL. Nullázható.
user_type_database sysname A CLR- és aliastípusok esetében annak az adatbázisnak a nevét tartalmazza, amelyben a típus definiálva van. Ellenkező esetben NULL. Nullázható.
user_type_schema sysname A CLR- és aliastípusok esetében annak a sémanak a nevét tartalmazza, amelyben a típus definiálva van. Ellenkező esetben NULL. Nullázható.
user_type_name sysname A CLR- és aliastípusok esetében a típus nevét tartalmazza. Ellenkező esetben NULL. Nullázható.
assembly_qualified_type_name nvarchar(4000) CLR-típusok esetén a típust meghatározó szerelvény és osztály nevét adja vissza. Ellenkező esetben NULL. Nullázható.
xml_collection_id Az oszlop adattípusának xml_collection_id tartalmazza a sys.columns. Ez az oszlop NULL ad vissza, ha a visszaadott típus nincs XML-sémagyűjteményhez társítva. Nullázható.
xml_collection_database sysname Azt az adatbázist tartalmazza, amelyben az ehhez a típushoz társított XML-sémagyűjtemény definiálva van. Ez az oszlop NULL ad vissza, ha a visszaadott típus nincs XML-sémagyűjteményhez társítva. Nullázható.
xml_collection_schema sysname Azt a sémát tartalmazza, amelyben az ehhez a típushoz társított XML-sémagyűjtemény definiálva van. Ez az oszlop NULL ad vissza, ha a visszaadott típus nincs XML-sémagyűjteményhez társítva. Nullázható.
xml_collection_name sysname Az ehhez a típushoz társított XML-sémagyűjtemény nevét tartalmazza. Ez az oszlop NULL ad vissza, ha a visszaadott típus nincs XML-sémagyűjteményhez társítva. Nullázható.
is_xml_document bit 1 ad vissza, ha a visszaadott adattípus XML, és ez a típus garantáltan teljes XML-dokumentum (beleértve a gyökércsomópontot is), szemben egy XML-töredékkel. Ellenkező esetben 0ad vissza. Nem null értékű.
is_case_sensitive bit 1 ad vissza, ha az oszlop kis- és nagybetűket megkülönböztet, és 0, ha nem. Nem null értékű.
is_fixed_length_clr_type bit Visszaadja 1, ha az oszlop rögzített hosszúságú CLR-típus, és 0, ha nem. Nem null értékű.
source_server sysname Az eredmény oszlopa által visszaadott forráskiszolgáló neve (ha távoli kiszolgálóról származik). A név a sys.serversjelenik meg. NULL adja vissza, ha az oszlop a helyi kiszolgálóról származik, vagy ha nem állapítható meg, hogy melyik kiszolgálóról származik. A rendszer csak böngészési adatok kérése esetén tölti ki. Nullázható.
source_database sysname Az eredmény oszlopa által visszaadott származó adatbázis neve. NULL ad vissza, ha az adatbázis nem határozható meg. A rendszer csak böngészési adatok kérése esetén tölti ki. Nullázható.
source_schema sysname Az eredmény oszlopa által visszaadott eredeti séma neve. NULL ad vissza, ha a séma nem határozható meg. A rendszer csak böngészési adatok kérése esetén tölti ki. Nullázható.
source_table sysname Az eredmény oszlopa által visszaadott származó tábla neve. NULL ad vissza, ha a tábla nem határozható meg. A rendszer csak böngészési adatok kérése esetén tölti ki. Nullázható.
source_column sysname Az eredményoszlop által visszaadott származó oszlop neve. NULL ad vissza, ha az oszlop nem határozható meg. A rendszer csak böngészési adatok kérése esetén tölti ki. Nullázható.
is_identity_column bit Az 1 adja vissza, ha az oszlop identitásoszlop, és 0, ha nem. NULL ad vissza, ha nem állapítható meg, hogy az oszlop identitásoszlop. Nullázható.
is_part_of_unique_key bit 1 ad vissza, ha az oszlop egy egyedi index része (beleértve az egyedi és az elsődleges korlátozást is), és 0, ha nem. NULL ad vissza, ha nem állapítható meg, hogy az oszlop egy egyedi index része. Csak akkor van kitöltve, ha böngészési adatokat kérnek. Nullázható.
is_updateable bit 1 ad vissza, ha az oszlop frissíthető, és 0, ha nem. NULL ad vissza, ha nem állapítható meg, hogy az oszlop frissíthető-e. Nullázható.
is_computed_column bit 1 ad vissza, ha az oszlop számított oszlop, és 0, ha nem. NULL ad vissza, ha nem állapítható meg, hogy az oszlop számított oszlop. Nullázható.
is_sparse_column_set bit A 1 adja vissza, ha az oszlop ritka oszlop, és 0, ha nem. NULL ad vissza, ha nem állapítható meg, hogy az oszlop egy ritka oszlopkészlet része. Nullázható.
ordinal_in_order_by_list kis Az oszlop helye ORDER BY listában. NULL ad vissza, ha az oszlop nem jelenik meg a ORDER BY listában, vagy ha a ORDER BY lista nem határozható meg egyedileg. Nullázható.
order_by_list_length kis A ORDER BY lista hossza. NULL ad vissza, ha nincs ORDER BY lista, vagy ha a ORDER BY lista nem határozható meg egyedileg. Ez az érték megegyezik az sp_describe_first_result_setáltal visszaadott összes sornál. Nullázható.
order_by_is_descending kis Ha a ordinal_in_order_by_list nem NULL, a order_by_is_descending oszlop az oszlop ORDER BY záradékának irányát jelenti. Ellenkező esetben a jelentés NULL. Nullázható.
tds_type_id Belső használatra. Nem null értékű.
tds_length Belső használatra. Nem null értékű.
tds_collation_id Belső használatra. Nullázható.
tds_collation_sort_id apró Belső használatra. Nullázható.

Megjegyzések

sp_describe_first_result_set garantálja, hogy ha az eljárás az A (hipotetikus) köteg első eredményhalmazú metaadatait adja vissza, és a köteg (A) végrehajtása után a köteg a következő:

  • optimalizálási idő hibát jelez
  • futásidejű hibát jelez
  • eredményhalmazt nem ad vissza
  • az sp_describe_first_result_set által leírt metaadatokkal rendelkező első eredményhalmazt adja vissza

A név, a nullitás és az adattípus eltérhet. Ha sp_describe_first_result_set üres eredményhalmazt ad vissza, a garancia az, hogy a köteg végrehajtása eredmény nélküli készleteket ad vissza.

Ez a garancia feltételezi, hogy a kiszolgálón nincsenek releváns sémamódosítások. A kiszolgáló vonatkozó sémamódosításai nem tartalmazzák az A kötegben lévő ideiglenes táblák vagy táblaváltozók létrehozását az sp_describe_first_result_set meghívása és az eredményhalmaz végrehajtása során történő visszaadása között, beleértve a B köteg sémamódosításait is.

sp_describe_first_result_set a következő esetekben ad vissza hibát:

  • A bemeneti @tsql nem érvényes Transact-SQL köteg. Az érvényességet a Transact-SQL köteg elemzése és elemzése határozza meg. A köteg által a lekérdezés optimalizálása vagy végrehajtása során okozott hibák nem kerülnek figyelembe annak meghatározásakor, hogy a Transact-SQL köteg érvényes-e.

  • @params nem NULL, és olyan sztringet tartalmaz, amely nem a paraméterek szintaktikailag érvényes deklarációs sztringje, vagy ha olyan sztringet tartalmaz, amely egynél több paramétert deklarál.

  • A bemeneti Transact-SQL köteg a @paramsparaméterrel azonos nevű helyi változót deklarál.

  • Az utasítás egy ideiglenes táblát használ.

  • A lekérdezés tartalmazza a lekérdezett állandó tábla létrehozását.

Ha az összes többi ellenőrzés sikeres, a bemeneti kötegen belüli összes lehetséges vezérlőfolyamat-útvonal figyelembe lesz véve. Ez figyelembe veszi az összes vezérlőfolyamat-utasítást (GOTO, IF/ELSE, WHILEés Transact-SQL TRY/CATCH blokkot), valamint a bemeneti kötegből egy EXECUTE utasítással meghívott összes eljárást, dinamikus Transact-SQL köteget vagy eseményindítót, egy DDL-utasítást, amely DDL-eseményindítókat indít el, vagy egy olyan DML-utasítást, amely eseményindítókat aktivál egy céltáblán vagy egy olyan táblán, amely egy kaszkádolt művelet miatt módosul egy adott táblán idegenkulcs-korlátozás. Egy bizonyos ponton, mint sok lehetséges vezérlőútvonalnál, egy algoritmus leáll.

Az egyes vezérlőfolyamat-útvonalak esetében az eredményhalmazt visszaadó első utasítást (ha van ilyen) a sp_describe_first_result_sethatározza meg.

Ha egy kötegben több lehetséges első utasítás található, az eredmények eltérőek lehetnek az oszlopok, az oszlopok neve, a nullitás és az adattípus között. A különbségek kezelésének módjáról itt olvashat részletesebben:

  • Ha az oszlopok száma eltér, a függvény hibát jelez, és nem ad eredményül.

  • Ha az oszlop neve eltér, a visszaadott oszlopnév NULLlesz.

  • Ha a nullabilitás eltér, a visszaadott nullhihetőség lehetővé teszi NULL.

  • Ha az adattípus eltér, a rendszer hibát jelez, és az alábbi esetek kivételével nem ad vissza eredményt:

    • varchar(a)varchar(a'), ahol a" > a.
    • varchar(a)varchar(max)
    • nvarchar(a)nvarchar(a'), ahol a" > a.
    • nvarchar(a)nvarchar(max)
    • varbinary(a)varbinary(a'), ahol az a' > a.
    • varbinary(a)varbinary(max)

sp_describe_first_result_set nem támogatja a közvetett rekurziót.

Engedélyek

Engedélyt igényel a @tsql argumentum végrehajtásához.

Példák

Tipikus példák

Egy. Egyszerű példa

Az alábbi példa az egyetlen lekérdezésből visszaadott eredményhalmazt ismerteti.

EXECUTE sp_describe_first_result_set @tsql = N'SELECT object_id, name, type_desc FROM sys.indexes';

Az alábbi példa egy paramétert tartalmazó lekérdezésből visszaadott eredményhalmazt mutatja be.

EXECUTE sp_describe_first_result_set @tsql = N'
SELECT object_id, name, type_desc
FROM sys.indexes
WHERE object_id = @id1', @params = N'@id1 int';

B. Példák tallózási módra

Az alábbi három példa bemutatja a különböző böngészési információs módok közötti fő különbséget. A lekérdezés eredményei csak a megfelelő oszlopokat tartalmazzák.

Példa a 0használatára, amely azt jelzi, hogy a rendszer nem ad vissza információt.

CREATE TABLE dbo.t
(
    a INT PRIMARY KEY,
    b1 INT
);
GO

CREATE VIEW dbo.v AS
    SELECT b1 AS b2
    FROM dbo.t;
GO

EXECUTE sp_describe_first_result_set N'SELECT b2 AS b3 FROM dbo.v', NULL, 0;

Íme egy részleges eredményhalmaz.

el van rejtve oszlop sorszám név source_schema source_table source_column is_part_of_unique_key
0 1 b3 NULL NULL NULL NULL

Az 1-et használó példa azt jelzi, hogy az adatokat úgy adja vissza, mintha a lekérdezésben szerepel egy FOR BROWSE beállítás.

EXECUTE sp_describe_first_result_set N'SELECT b2 AS b3 FROM v', NULL, 1;

Íme egy részleges eredményhalmaz.

el van rejtve oszlop sorszám név source_schema source_table source_column is_part_of_unique_key
0 1 b3 dbo t B1 0
1 2 egy dbo t egy 1

Példa a 2-re, amely az elemzést úgy jelzi, mintha egy kurzort készít elő.

EXECUTE sp_describe_first_result_set N'SELECT b2 AS b3 FROM v', NULL, 2;

Itt van az eredményhalmaz.

el van rejtve oszlop sorszám név source_schema source_table source_column is_part_of_unique_key
0 1 B3 dbo v B2 0
1 2 ROWSTAT NULL NULL NULL 0

C. Eredmények tárolása táblában

Bizonyos esetekben a sp_describe_first_result_set eljárás eredményeit egy táblába kell helyeznie, hogy a sémát tovább tudja feldolgozni.

Először létre kell hoznia egy táblát, amely megfelel a sp_describe_first_result_set eljárás kimenetének:

CREATE TABLE #frs
(
    is_hidden BIT NOT NULL,
    column_ordinal INT NOT NULL,
    name SYSNAME NULL,
    is_nullable BIT NOT NULL,
    system_type_id INT NOT NULL,
    system_type_name NVARCHAR (256) NULL,
    max_length SMALLINT NOT NULL,
    precision TINYINT NOT NULL,
    scale TINYINT NOT NULL,
    collation_name SYSNAME NULL,
    user_type_id INT NULL,
    user_type_database SYSNAME NULL,
    user_type_schema SYSNAME NULL,
    user_type_name SYSNAME NULL,
    assembly_qualified_type_name NVARCHAR (4000),
    xml_collection_id INT NULL,
    xml_collection_database SYSNAME NULL,
    xml_collection_schema SYSNAME NULL,
    xml_collection_name SYSNAME NULL,
    is_xml_document BIT NOT NULL,
    is_case_sensitive BIT NOT NULL,
    is_fixed_length_clr_type BIT NOT NULL,
    source_server SYSNAME NULL,
    source_database SYSNAME NULL,
    source_schema SYSNAME NULL,
    source_table SYSNAME NULL,
    source_column SYSNAME NULL,
    is_identity_column BIT NULL,
    is_part_of_unique_key BIT NULL,
    is_updateable BIT NULL,
    is_computed_column BIT NULL,
    is_sparse_column_set BIT NULL,
    ordinal_in_order_by_list SMALLINT NULL,
    order_by_list_length SMALLINT NULL,
    order_by_is_descending SMALLINT NULL,
    tds_type_id INT NOT NULL,
    tds_length INT NOT NULL,
    tds_collation_id INT NULL,
    tds_collation_sort_id TINYINT NULL
);

Amikor létrehoz egy táblát, abban a táblában tárolhatja egy lekérdezés sémáját.

DECLARE @tsql AS NVARCHAR (MAX) = 'select top 0 * from sys.credentials';

INSERT INTO #frs
EXECUTE sys.sp_describe_first_result_set @tsql;

SELECT *
FROM #frs;

Példák problémákra

Az alábbi példák két táblát használnak minden példához. A példatáblák létrehozásához hajtsa végre az alábbi utasításokat.

CREATE TABLE dbo.t1
(
    a INT NULL,
    b VARCHAR (10) NULL,
    c NVARCHAR (10) NULL
);

CREATE TABLE dbo.t2
(
    a SMALLINT NOT NULL,
    d VARCHAR (20) NOT NULL,
    e INT NOT NULL
);

Hiba, mert az oszlopok száma eltér

A lehetséges első eredményhalmazokban lévő oszlopok száma ebben a példában különbözik.

EXECUTE sp_describe_first_result_set @tsql = N'
IF (1 = 1)
    SELECT a FROM t1;
ELSE
    SELECT a, b FROM t1;

SELECT * FROM t; -- Ignored, not a possible first result set.';

Hiba, mert az adattípusok eltérnek

Az oszloptípusok eltérőek az első lehetséges eredményhalmazokban.

EXECUTE sp_describe_first_result_set @tsql = N'
IF (1 = 1)
    SELECT a FROM t1;
ELSE
    SELECT a FROM t2;';

Ez az eltérő típusok (int és kis) hibáját eredményezi.

Az oszlop neve nem határozható meg

A lehetséges első eredményhalmazokban lévő oszlopok hossza azonos változóhossz-típus, nullhiba és oszlopnevek esetén tér el egymástól:

EXECUTE sp_describe_first_result_set @tsql = N'
IF (1 = 1)
    SELECT b FROM t1;
ELSE
    SELECT d FROM t2;';

Íme egy részleges eredményhalmaz.

Oszlop Érték
name Ismeretlen oszlopnév
system_type_name varchar
max_length 20
is_nullable 1

Az oszlopnév aliasolással való azonosságra kényszerítve

Ugyanaz, mint az előző, de az oszlopok neve megegyezik az oszlop aliasolásával.

EXECUTE sp_describe_first_result_set @tsql = N'
IF (1 = 1)
    SELECT b FROM t1;
ELSE
    SELECT d AS b FROM t2;';

Íme egy részleges eredményhalmaz.

Oszlop Érték
name b
system_type_name varchar
max_length 20
is_nullable 1

Hiba, mert az oszloptípusok nem egyeznek

Az oszloptípusok eltérőek az első lehetséges eredményhalmazokban.

EXECUTE sp_describe_first_result_set @tsql = N'
IF (1 = 1)
    SELECT b FROM t1;
ELSE
    SELECT c FROM t1;';

Ez az eltérő típusok (varchar(10) és nvarchar(10)) hibáját eredményezi.

Az eredményhalmaz hibát adhat vissza

Az első eredményhalmaz hiba vagy eredményhalmaz.

EXECUTE sp_describe_first_result_set @tsql = N'
IF (1 = 1)
    RAISERROR(''Some Error'', 16 , 1);
ELSE
    SELECT a FROM t1;
SELECT e FROM t2; -- Ignored, not a possible first result set.';

Íme egy részleges eredményhalmaz.

Oszlop Érték
name a
system_type_name int
is_nullable 1

Egyes kód elérési útjai nem adnak eredményül

Az első eredményhalmaz null értékű vagy eredményhalmaz.

EXECUTE sp_describe_first_result_set @tsql = N'
IF (1 = 1)
    RETURN;
SELECT a FROM t1;';

Íme egy részleges eredményhalmaz.

Oszlop Érték
name a
system_type_name int
is_nullable 1

Dinamikus SQL-ből származó eredmény

Az első eredményhalmaz a dinamikus SQL, amely felderíthető, mivel ez egy literális sztring.

EXECUTE sp_describe_first_result_set @tsql = N'
EXECUTE(N''SELECT a FROM t1'');';

Íme egy részleges eredményhalmaz.

Oszlop Érték
name a
system_type_name int
is_nullable 1

Eredményhiba a dinamikus SQL-ből

Az első eredményhalmaz nincs meghatározva a dinamikus SQL miatt.

EXECUTE sp_describe_first_result_set @tsql = N'
DECLARE @SQL NVARCHAR(max);
SET @SQL = N''SELECT a FROM t1 WHERE 1 = 1'';
IF (1 = 1)
    SET @SQL += N'' AND e > 10'';
EXECUTE(@SQL);';

Ez hibát eredményez. Az eredmény nem észlelhető a dinamikus SQL miatt.

Felhasználó által megadott eredménykészlet

Az első eredményhalmazt a felhasználó manuálisan adja meg.

EXECUTE sp_describe_first_result_set @tsql = N'
DECLARE @SQL NVARCHAR(max);
SET @SQL = N''SELECT a FROM t1 WHERE 1 = 1'';
IF (1 = 1)
    SET @SQL += N'' AND e > 10'';
EXECUTE(@SQL)
    WITH RESULT SETS (
        (Column1 BIGINT NOT NULL)
    );';

Íme egy részleges eredményhalmaz.

Oszlop Érték
name Column1
system_type_name bigint
is_nullable 0

Nem egyértelmű eredményhalmaz által okozott hiba

Ez a példa feltételezi, hogy egy másik user1 nevű felhasználó egy t1 nevű táblával rendelkezik az alapértelmezett séma s1 oszlopokkal (a int NOT NULL).

EXECUTE sp_describe_first_result_set @tsql = N'
    IF (@p > 0)
    EXECUTE AS USER = ''user1'';
    SELECT * FROM t1;', @params = N'@p int';

Ez a kód Invalid object name hibát eredményez. t1 lehet dbo.t1 vagy s1.t1, mindegyikhez eltérő számú oszlop tartozik.

Eredmény kétértelmű eredménykészlettel is

Használja ugyanazokat a feltételezéseket, mint az előző példában.

EXECUTE sp_describe_first_result_set @tsql = N'
    IF (@p > 0)
    EXECUTE AS USER = ''user1'';
    SELECT a FROM t1;';

Íme egy részleges eredményhalmaz.

Oszlop Érték
name a
system_type_name int
is_nullable 1

Mind dbo.t1.a, mind s1.t1.ainttípussal és különböző nullhiba-értékkel rendelkezik.