Delen via


sp_describe_first_result_set (Transact-SQL)

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Analytics-eindpunt in Microsoft FabricWarehouse in Microsoft Fabric

Retourneert de metagegevens voor de eerste mogelijke resultatenset van de Transact-SQL batch. Retourneert een lege resultatenset als de batch geen resultaten retourneert. Er wordt een fout gegenereerd als de database-engine de metagegevens voor de eerste query die wordt uitgevoerd niet kan bepalen door een statische analyse uit te voeren. De dynamische beheerweergave sys.dm_exec_describe_first_result_set retourneert dezelfde informatie.

Transact-SQL syntaxisconventies

Syntaxis

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

Argumenten

Belangrijk

Argumenten voor uitgebreide opgeslagen procedures moeten worden ingevoerd in de specifieke volgorde, zoals beschreven in de sectie Syntaxis. Als de parameters niet in de volgorde zijn ingevoerd, treedt er een foutbericht op.

[ @tsql = ] 'tsql-'

Een of meer Transact-SQL instructies. @tsql kan nvarchar(n) of nvarchar(max)zijn.

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

@params biedt een declaratietekenreeks voor parameters voor de Transact-SQL batch, die vergelijkbaar is met sp_executesql. Parameters kunnen nvarchar(n) of nvarchar(max)zijn.

Een tekenreeks die de definities bevat van alle parameters die zijn ingesloten in @tsql. De tekenreeks moet een Unicode-constante of een Unicode-variabele zijn. Elke parameterdefinitie bestaat uit een parameternaam en een gegevenstype. n is een tijdelijke aanduiding die aanvullende parameterdefinities aangeeft. Elke parameter die in de instructie is opgegeven, moet worden gedefinieerd in @params. Als de Transact-SQL-instructie of batch in de instructie geen parameters bevat, is @params niet vereist. NULL is de standaardwaarde voor deze parameter.

[ @browse_information_mode = ] kleine

Hiermee geeft u op of extra sleutelkolommen en brontabelgegevens worden geretourneerd. Als deze optie is ingesteld op 1, wordt elke query geanalyseerd alsof deze een FOR BROWSE optie voor de query bevat.

  • Als deze optie is ingesteld op 0, worden er geen gegevens geretourneerd.

  • Als deze optie is ingesteld op 1, wordt elke query geanalyseerd alsof deze een FOR BROWSE optie voor de query bevat. Hiermee worden basistabelnamen geretourneerd als de bronkolomgegevens.

  • Als deze optie is ingesteld op 2, wordt elke query geanalyseerd alsof deze wordt gebruikt bij het voorbereiden of uitvoeren van een cursor. Hiermee worden weergavenamen geretourneerd als bronkolomgegevens.

Codewaarden retourneren

sp_describe_first_result_set retourneert altijd de status nul bij succes. Als de procedure een fout genereert en de procedure wordt aangeroepen als een RPC, wordt de retourstatus ingevuld door het type fout dat wordt beschreven in de kolom error_type van sys.dm_exec_describe_first_result_set. Als de procedure wordt aangeroepen vanuit Transact-SQL, is de retourwaarde altijd nul, zelfs als er een fout optreedt.

Resultatenset

Deze algemene metagegevens worden geretourneerd als een resultatenset met één rij voor elke kolom in de metagegevens van de resultaten. Elke rij beschrijft het type en de null-waarde van de kolom in de indeling die in de volgende sectie wordt beschreven. Als de eerste instructie niet bestaat voor elk besturingselementpad, wordt een resultatenset met nul rijen geretourneerd.

Kolomnaam Gegevenstype Beschrijving
is_hidden bit Geeft aan dat de kolom een extra kolom is die is toegevoegd voor browse-informatiedoeleinden en dat deze niet daadwerkelijk wordt weergegeven in de resultatenset. Niet nullable.
column_ordinal Bevat de rangtelpositie van de kolom in de resultatenset. De positie van de eerste kolom wordt opgegeven als 1. Niet nullable.
name sysname- Bevat de naam van de kolom als een naam kan worden bepaald. Anders bevat het NULL. Nullable.
is_nullable bit Bevat de waarde 1 als de kolom NULLtoestaat, 0 als de kolom geen NULLtoestaat en 1 als deze niet kan worden bepaald als de kolom NULLtoestaat. Niet nullable.
system_type_id Bevat de system_type_id van het gegevenstype van de kolom zoals opgegeven in sys.types. Voor CLR-typen, zelfs als de system_type_name kolom NULLretourneert, retourneert deze kolom de waarde 240. Niet nullable.
system_type_name nvarchar(256) Bevat de naam en argumenten (zoals lengte, precisie, schaal), die zijn opgegeven voor het gegevenstype van de kolom. Als het gegevenstype een door de gebruiker gedefinieerd aliastype is, wordt hier het onderliggende systeemtype opgegeven. Als het een door de gebruiker gedefinieerd CLR-type is, wordt NULL in deze kolom geretourneerd. Nullable.
max_length kleine Maximale lengte (in bytes) van de kolom.

-1 = Kolomgegevenstype is varchar(max), nvarchar(max), varbinary(max)of xml-.

Voor kolommen voor tekst wordt de max_length waarde 16 of de waarde die is ingesteld door sp_tableoption 'text in row'. Niet nullable.
precision kleine Precisie van de kolom als numeriek is gebaseerd. Anders wordt 0geretourneerd. Niet nullable.
scale kleine Schaal van kolom indien numeriek. Anders wordt 0geretourneerd. Niet nullable.
collation_name sysname- Naam van de sortering van de kolom als deze is gebaseerd op tekens. Anders wordt NULLgeretourneerd. Nullable.
user_type_id Voor CLR- en aliastypen bevat de user_type_id van het gegevenstype van de kolom zoals opgegeven in sys.types. Anders is NULL. Nullable.
user_type_database sysname- Voor CLR- en aliastypen bevat u de naam van de database waarin het type is gedefinieerd. Anders is NULL. Nullable.
user_type_schema sysname- Voor CLR- en aliastypen bevat u de naam van het schema waarin het type is gedefinieerd. Anders is NULL. Nullable.
user_type_name sysname- Voor CLR- en aliastypen bevat u de naam van het type. Anders is NULL. Nullable.
assembly_qualified_type_name nvarchar(4000) Voor CLR-typen retourneert u de naam van de assembly en klasse die het type definieert. Anders is NULL. Nullable.
xml_collection_id Bevat de xml_collection_id van het gegevenstype van de kolom zoals opgegeven in sys.columns. Deze kolom retourneert NULL als het geretourneerde type niet is gekoppeld aan een XML-schemaverzameling. Nullable.
xml_collection_database sysname- Bevat de database waarin de XML-schemaverzameling die aan dit type is gekoppeld, is gedefinieerd. Deze kolom retourneert NULL als het geretourneerde type niet is gekoppeld aan een XML-schemaverzameling. Nullable.
xml_collection_schema sysname- Bevat het schema waarin de XML-schemaverzameling die aan dit type is gekoppeld, is gedefinieerd. Deze kolom retourneert NULL als het geretourneerde type niet is gekoppeld aan een XML-schemaverzameling. Nullable.
xml_collection_name sysname- Bevat de naam van de XML-schemaverzameling die aan dit type is gekoppeld. Deze kolom retourneert NULL als het geretourneerde type niet is gekoppeld aan een XML-schemaverzameling. Nullable.
is_xml_document bit Retourneert 1 als het geretourneerde gegevenstype XML is en dat type gegarandeerd een volledig XML-document (inclusief een hoofdknooppunt) is, in plaats van een XML-fragment. Anders wordt 0geretourneerd. Niet nullable.
is_case_sensitive bit Retourneert 1 als de kolom een hoofdlettergevoelig tekenreekstype is en 0 als dat niet het geval is. Niet nullable.
is_fixed_length_clr_type bit Retourneert 1 als de kolom een CLR-type met vaste lengte is en 0 als dat niet het is. Niet nullable.
source_server sysname- De naam van de oorspronkelijke server die door de kolom in dit resultaat wordt geretourneerd (als deze afkomstig is van een externe server). De naam wordt gegeven zoals deze wordt weergegeven in sys.servers. Retourneert NULL als de kolom afkomstig is van de lokale server of als deze niet kan worden bepaald op welke server deze afkomstig is. Wordt alleen ingevuld als er browsegegevens worden aangevraagd. Nullable.
source_database sysname- De naam van de oorspronkelijke database die door de kolom in dit resultaat wordt geretourneerd. Retourneert NULL als de database niet kan worden bepaald. Wordt alleen ingevuld als er browsegegevens worden aangevraagd. Nullable.
source_schema sysname- De naam van het oorspronkelijke schema dat door de kolom in dit resultaat wordt geretourneerd. Retourneert NULL als het schema niet kan worden bepaald. Wordt alleen ingevuld als er browsegegevens worden aangevraagd. Nullable.
source_table sysname- De naam van de oorspronkelijke tabel die door de kolom in dit resultaat wordt geretourneerd. Retourneert NULL als de tabel niet kan worden bepaald. Wordt alleen ingevuld als er browsegegevens worden aangevraagd. Nullable.
source_column sysname- Naam van de oorspronkelijke kolom die wordt geretourneerd door de resultaatkolom. Retourneert NULL als de kolom niet kan worden bepaald. Wordt alleen ingevuld als er browsegegevens worden aangevraagd. Nullable.
is_identity_column bit Retourneert 1 als de kolom een identiteitskolom is en 0 zo niet. Retourneert NULL als deze niet kan worden vastgesteld dat de kolom een identiteitskolom is. Nullable.
is_part_of_unique_key bit Retourneert 1 als de kolom deel uitmaakt van een unieke index (inclusief unieke en primaire beperking) en 0 indien niet. Retourneert NULL als deze niet kan worden vastgesteld dat de kolom deel uitmaakt van een unieke index. Alleen ingevuld als browsegegevens worden aangevraagd. Nullable.
is_updateable bit Retourneert 1 als de kolom kan worden bijgewerkt en 0 indien niet. Retourneert NULL als deze niet kan worden vastgesteld dat de kolom kan worden bijgewerkt. Nullable.
is_computed_column bit Retourneert 1 als de kolom een berekende kolom is en 0 zo niet. Retourneert NULL als deze niet kan worden vastgesteld dat de kolom een berekende kolom is. Nullable.
is_sparse_column_set bit Retourneert 1 als de kolom een sparse-kolom is en 0 als dat niet zo is. Retourneert NULL als deze niet kan worden vastgesteld dat de kolom deel uitmaakt van een sparse-kolomset. Nullable.
ordinal_in_order_by_list kleine Positie van deze kolom in ORDER BY lijst. Retourneert NULL als de kolom niet wordt weergegeven in de ORDER BY lijst of als de ORDER BY lijst niet uniek kan worden bepaald. Nullable.
order_by_list_length kleine De lengte van de ORDER BY lijst. Retourneert NULL als er geen ORDER BY lijst is of als de ORDER BY lijst niet uniek kan worden bepaald. Deze waarde is hetzelfde voor alle rijen die worden geretourneerd door sp_describe_first_result_set. Nullable.
order_by_is_descending kleine Als de ordinal_in_order_by_list niet is NULL, rapporteert de order_by_is_descending kolom de richting van de ORDER BY component voor deze kolom. Anders wordt NULLgerapporteerd. Nullable.
tds_type_id Voor intern gebruik. Niet nullable.
tds_length Voor intern gebruik. Niet nullable.
tds_collation_id Voor intern gebruik. Nullable.
tds_collation_sort_id kleine Voor intern gebruik. Nullable.

Opmerkingen

sp_describe_first_result_set garandeert dat als de procedure de eerste metagegevens van de resultatenset retourneert voor (een hypothetische) batch A en dat als die batch (A) vervolgens wordt uitgevoerd, de batch:

  • genereert een optimalisatietijdfout
  • genereert een runtime-fout
  • retourneert geen resultatenset
  • retourneert een eerste resultatenset met dezelfde metagegevens die worden beschreven door sp_describe_first_result_set

De naam, de null-waarde en het gegevenstype kunnen verschillen. Als sp_describe_first_result_set een lege resultatenset retourneert, is de garantie dat de batchuitvoering geen resultatensets retourneert.

Deze garantie veronderstelt dat er geen relevante schemawijzigingen op de server zijn. Relevante schemawijzigingen op de server bevatten geen tijdelijke tabellen of tabelvariabelen in de batch A tussen de tijd die sp_describe_first_result_set wordt aangeroepen en de tijd waarop de resultatenset wordt geretourneerd tijdens de uitvoering, inclusief schemawijzigingen die zijn aangebracht door batch B.

sp_describe_first_result_set retourneert een fout in een van de volgende gevallen:

  • De invoer @tsql is geen geldige Transact-SQL batch. De geldigheid wordt bepaald door het parseren en analyseren van de Transact-SQL batch. Eventuele fouten die worden veroorzaakt door de batch tijdens queryoptimalisatie of tijdens de uitvoering, worden niet meegenomen bij het bepalen of de Transact-SQL batch geldig is.

  • @params is niet NULL en bevat een tekenreeks die geen syntactisch geldige declaratietekenreeks is voor parameters, of als deze een tekenreeks bevat die meer dan één keer een parameter declareert.

  • De invoer Transact-SQL batch declareert een lokale variabele van dezelfde naam als een parameter die is gedeclareerd in @params.

  • De instructie maakt gebruik van een tijdelijke tabel.

  • De query bevat het maken van een permanente tabel waarop vervolgens een query wordt uitgevoerd.

Als alle andere controles slagen, worden alle mogelijke controlestroompaden in de invoerbatch overwogen. Hierbij worden alle controlestroominstructies (GOTO, IF/ELSE, WHILEen Transact-SQL TRY/CATCH blokken) en eventuele procedures, dynamische Transact-SQL batches of triggers die worden aangeroepen vanuit de invoerbatch door een EXEC-instructie, een DDL-instructie die ervoor zorgt dat DDL-triggers worden geactiveerd, of een DML-instructie die ervoor zorgt dat triggers worden geactiveerd op een doeltabel of in een tabel die wordt gewijzigd vanwege trapsgewijze actie op een beperking voor refererende sleutel. Op een bepaald moment stopt een algoritme, net als bij veel mogelijke besturingspaden.

Voor elk besturingsstroompad wordt de eerste instructie (indien aanwezig) die een resultatenset retourneert, bepaald door sp_describe_first_result_set.

Wanneer er meerdere mogelijke eerste instructies in een batch worden gevonden, kunnen de resultaten verschillen in het aantal kolommen, de kolomnaam, de null-waarde en het gegevenstype. Hoe deze verschillen worden afgehandeld, wordt hier gedetailleerder beschreven:

  • Als het aantal kolommen verschilt, wordt er een fout gegenereerd en wordt er geen resultaat geretourneerd.

  • Als de kolomnaam verschilt, wordt de geretourneerde kolomnaam ingesteld op NULL.

  • Als de null-waarde verschilt, staat de geretourneerde null-waarde NULLtoe.

  • Als het gegevenstype verschilt, wordt er een fout gegenereerd en wordt er geen resultaat geretourneerd, met uitzondering van de volgende gevallen:

    • varchar(a)varchar(a') waarbij een > a.
    • varchar(a) om varchar(max) te
    • nvarchar(a)nvarchar(a)- waarbij een' > a.
    • nvarchar(a)nvarchar(max)
    • varbinary(a) om varbinary(a)-> a.
    • varbinary(a)varbinary(max)

sp_describe_first_result_set biedt geen ondersteuning voor indirecte recursie.

Machtigingen

Hiervoor is toestemming vereist om het argument @tsql uit te voeren.

Voorbeelden

Typische voorbeelden

Een. Basisvoorbeeld

In het volgende voorbeeld wordt de resultatenset beschreven die is geretourneerd door één query.

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

In het volgende voorbeeld ziet u de resultatenset die is geretourneerd uit één query die een parameter bevat.

EXEC 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. Voorbeelden van bladermodus

In de volgende drie voorbeelden ziet u het belangrijkste verschil tussen de verschillende bladerinformatiemodi. Alleen de relevante kolommen worden opgenomen in de queryresultaten.

Voorbeeld van 0, waarmee wordt aangegeven dat er geen gegevens worden geretourneerd.

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

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

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

Hier volgt een gedeeltelijke resultatenset.

is_hidden column_ordinal naam source_schema source_table source_column is_part_of_unique_key
0 1 b3 NULL NULL NULL NULL

Voorbeeld met 1 waarmee wordt aangegeven dat deze informatie retourneert alsof deze een optie FOR BROWSE op de query bevat.

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

Hier volgt een gedeeltelijke resultatenset.

is_hidden column_ordinal naam source_schema source_table source_column is_part_of_unique_key
0 1 b3 Dbo t B1 0
1 2 een Dbo t een 1

Voorbeeld met 2 waarmee wordt aangegeven dat deze wordt geanalyseerd alsof u een cursor voorbereidt.

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

Dit is de resultatenset.

is_hidden column_ordinal naam 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. Resultaten opslaan in een tabel

In sommige scenario's moet u de resultaten van de sp_describe_first_result_set procedure in een tabel plaatsen, zodat u het schema verder kunt verwerken.

Eerst moet u een tabel maken die overeenkomt met de uitvoer van de sp_describe_first_result_set procedure:

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
);

Wanneer u een tabel maakt, kunt u het schema van een query in die tabel opslaan.

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

INSERT INTO #frs
EXEC sys.sp_describe_first_result_set @tsql;

SELECT * FROM #frs;

Voorbeelden van problemen

In de volgende voorbeelden worden twee tabellen gebruikt voor alle voorbeelden. Voer de volgende instructies uit om de voorbeeldtabellen te maken.

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
);

Fout omdat het aantal kolommen verschilt

Het aantal kolommen in mogelijke eerste resultatensets verschilt in dit voorbeeld.

EXEC 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.';

Fout omdat de gegevenstypen verschillen

Kolommentypen verschillen in verschillende mogelijke eerste resultatensets.

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

Dit resulteert in een fout van niet-overeenkomende typen (int versus smallint).

Kolomnaam kan niet worden bepaald

Kolommen in mogelijke eerste resultatensets verschillen per lengte voor hetzelfde variabele lengtetype, null-waarde en kolomnamen:

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

Hier volgt een gedeeltelijke resultatenset.

Kolom Waarde
name Onbekende kolomnaam
system_type_name varchar
max_length 20
is_nullable 1

Kolomnaam moet identiek zijn via aliasing

Hetzelfde als vorige, maar kolommen hebben dezelfde naam via kolomaliassen.

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

Hier volgt een gedeeltelijke resultatenset.

Kolom Waarde
name b
system_type_name varchar
max_length 20
is_nullable 1

Fout omdat kolomtypen niet kunnen worden vergeleken

De typen kolommen verschillen in verschillende mogelijke eerste resultatensets.

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

Dit resulteert in een fout van niet-overeenkomende typen (varchar(10) versus nvarchar(10)).

Resultatenset kan een fout retourneren

De eerste resultatenset is een fout- of resultatenset.

EXEC 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.';

Hier volgt een gedeeltelijke resultatenset.

Kolom Waarde
name a
system_type_name int
is_nullable 1

Sommige codepaden retourneren geen resultaten

De eerste resultatenset is null of een resultatenset.

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

Hier volgt een gedeeltelijke resultatenset.

Kolom Waarde
name a
system_type_name int
is_nullable 1

Resultaat van dynamische SQL

De eerste resultatenset is dynamische SQL die detecteerbaar is omdat het een letterlijke tekenreeks is.

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

Hier volgt een gedeeltelijke resultatenset.

Kolom Waarde
name a
system_type_name int
is_nullable 1

Resultaatfout van dynamische SQL

De eerste resultatenset is niet gedefinieerd vanwege dynamische SQL.

EXEC 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'';
EXEC(@SQL);';

Dit resulteert in een fout. Het resultaat kan niet worden gedetecteerd vanwege de dynamische SQL.

Resultatenset opgegeven door gebruiker

De eerste resultatenset wordt handmatig opgegeven door de gebruiker.

EXEC 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'';
EXEC(@SQL)
    WITH RESULT SETS (
        (Column1 BIGINT NOT NULL)
    );';

Hier volgt een gedeeltelijke resultatenset.

Kolom Waarde
name Column1
system_type_name bigint
is_nullable 0

Fout veroorzaakt door een dubbelzinnige resultatenset

In dit voorbeeld wordt ervan uitgegaan dat een andere gebruiker met de naam user1 een tabel heeft met de naam t1 in het standaardschema s1 met kolommen (a int NOT NULL).

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

Deze code resulteert in een Invalid object name fout. t1 kan dbo.t1 of s1.t1zijn, elk met een ander aantal kolommen.

Resultaat zelfs met dubbelzinnige resultatenset

Gebruik dezelfde veronderstellingen als in het vorige voorbeeld.

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

Hier volgt een gedeeltelijke resultatenset.

Kolom Waarde
name a
system_type_name int
is_nullable 1

Zowel dbo.t1.a als s1.t1.a hebben type inten verschillende null-waarden.