sp_describe_first_result_set (Transact-SQL)

 

DIESES THEMA GILT FÜR:jaSQL Server (ab 2012)jaAzure SQL-DatenbankneinAzure SQL Data Warehouse neinParallel Data Warehouse

Gibt die Metadaten für die erste mögliche des Resultset der Transact-SQL Batch. Gibt ein leeres Resultset zurück, wenn vom Batch keine Ergebnisse zurückgegeben werden. Löst einen Fehler aus, wenn die Datenbankmodul kann nicht bestimmt werden die Metadaten für die erste Abfrage, die von einer statischen Analyse ausgeführt wird. Die dynamische verwaltungssicht dm_exec_describe_first_result_set (Transact-SQL) gibt die gleiche Informationen zurück.

Topic link icon Transact-SQL-Syntaxkonventionen

Gilt für: SQL Server (SQL Server 2012 bis zur aktuellen Version), Azure SQL-Datenbank.
  
sp_describe_first_result_set [ @tsql = ] N'Transact-SQL_batch'   
    [ , [ @params = ] N'parameters' ]   
    [ , [ @browse_information_mode = ] <tinyint> ] ]  

[ @tsql = ] 'Transact-SQL_batch'
Eine oder mehrere Transact-SQL-Anweisungen. Transact-SQL_batch möglicherweise Nvarchar (n) oder nvarchar(max).

[ @params = ] N'parameters'
@paramsStellt eine deklarationszeichenfolge für Parameter für die Transact-SQL Batch, die analog zu sp_executesql bereit ist. Parameter können ggf. werden nvarchar (n) oder nvarchar(max).

Eine Zeichenfolge, die die Definitionen aller Parameter enthält, die in eingebettet wurden die Transact-SQL _batch. Die Zeichenfolge muss eine Unicode-Konstante oder eine Unicode-Variable sein. Jede Parameterdefinition besteht aus einem Parameternamen und einem Datentyp. n ist ein Platzhalter, der zusätzliche Parameterdefinitionen. Jeder in der Anweisung angegebene Parameter muss definiert werden, @params. Wenn die Transact-SQL Anweisung oder eines Batches in der Anweisung keine Parameter, @params ist nicht erforderlich. NULL wird der Standardwert für diesen Parameter an.

[ @browse_information_mode = ] tinyint
Gibt an, ob zusätzliche Schlüsselspalten und Quelltabelleninformationen zurückgegeben werden. Wenn 1 werden bei jeder Abfrage analysiert wird, als ob es sich um eine FOR BROWSE-Option für die Abfrage enthält. Zusätzliche Schlüsselspalten und Quelltabelleninformationen werden zurückgegeben.

  • Bei 0 werden keine Informationen zurückgegeben.

  • Wenn 1 werden bei jeder Abfrage analysiert wird, als ob es sich um eine FOR BROWSE-Option für die Abfrage enthält. Damit werden Basistabellennamen als Quellspalteninformationen zurückgegeben.

  • Bei 2 wird jede Abfrage analysiert, als würde sie beim Vorbereiten oder Ausführen eines Cursors verwendet. Damit werden Sichtnamen als Quellspalteninformationen zurückgegeben.

Sp_describe_first_result_set immer den Status bei Erfolg NULL zurück. Wenn die Prozedur löst einen Fehler aus, und die Prozedur als RPC aufgerufen wird, wird der Rückgabestatus durch den Typ des Fehlers in der Error_type-Spalte der Sys. dm_exec_describe_first_result_set beschriebenen aufgefüllt. Wenn die Prozedur von Transact-SQL aufgerufen wird, ist der Rückgabewert immer&0; dies gilt auch bei einem Fehler.

Diese allgemeinen Metadaten werden in den Ergebnismetadaten als Resultset mit einer Zeile für jede Spalte zurückgegeben. Jede Zeile beschreibt den Typ und die NULL-Zulässigkeit der Spalte in dem Format, das im folgenden Abschnitt beschriebenen wird. Wenn die erste Anweisung nicht für alle Steuerelementpfade vorhanden ist, wird ein Resultset mit&0; Zeilen zurückgegeben.

SpaltennameDatentypDescription
is_hiddenBit NOT NULLGibt an, dass es sich bei der Spalte um eine zusätzliche Spalte zum Suchen von Informationen handelt, die nicht im Resultset angezeigt wird.
column_ordinalInt NOT NULLEnthält die Ordnungsposition der Spalte im Resultset. Die Position der ersten Spalte wird mit 1 angegeben.
nameSysname NULLEnthält den Namen der Spalte, wenn ein Name bestimmt werden kann. Andernfalls enthält er NULL.
is_nullableBit NOT NULLEnthält den Wert 1, wenn die Spalte NULL-Werte zulässt, 0, wenn die Spalte keinen NULL-Werte zulässt, und 1, wenn nicht ermittelt werden kann, ob die Spalte NULL-Werte zulässt.
system_type_idInt NOT NULLEnthält die System_type_id des Datentyps der Spalte, wie in sys.types angegeben. Bei CLR-Typen wird von dieser Spalte der Wert 240 zurückgegeben, obwohl von der system_type_name-Spalte NULL zurückgegeben wird.
system_type_namenvarchar (256) NULLEnthält den Namen und die Argumente (z. B. Länge, Genauigkeit oder Skala), die für den Datentyp der Spalte angegeben wurden. Wenn der Datentyp ein benutzerdefinierter Aliastyp ist, wird der zugrunde liegende Systemtyp hier angegeben. Bei einem benutzerdefinierten CLR-Typ wird NULL in dieser Spalte zurückgegeben.
max_lengthSmallint nicht NULLMaximale Länge (in Byte) für die Spalte.

-1 = Spaltendatentyp ist varchar(max), nvarchar(max), varbinary(max), oder Xml.

Für Text Spalten, die Max_length Wert ist 16 oder festlegen, indem Sp_tableoption 'Text in Row'.
Genauigkeit"tinyint" NOT NULLDie Genauigkeit der Spalte, wenn sie auf numerischen Werten basiert. Andernfalls wird 0 zurückgegeben.
Skalierung"tinyint" NOT NULLDie Skalierung der Spalte, wenn sie auf numerischen Werten basiert. Andernfalls wird 0 zurückgegeben.
SortierungsnameSysname NULLName der Sortierung der Spalte, wenn diese zeichenbasiert ist. Andernfalls wird NULL zurückgegeben.
user_type_idInt NULLEnthält bei CLR- und Aliastypen die user_type_id des Datentyps der Spalte, wie in sys.types angegeben. Andernfalls NULL.
user_type_databaseSysname NULLEnthält bei CLR- und Aliastypen den Namen der Datenbank, in der der Typ definiert wurde. Andernfalls NULL.
user_type_schemaSysname NULLEnthält bei CLR- und Aliastypen den Namen des Schemas, in dem der Typ definiert wurde. Andernfalls NULL.
user_type_nameSysname NULLEnthält bei CLR- und Aliastypen den Namen des Typs. Andernfalls NULL.
assembly_qualified_type_namenvarchar(4000)Gibt bei CLR-Typen den Namen der Assembly und der Klasse zurück, die den Typ definieren. Andernfalls NULL.
xml_collection_idInt NULLEnthält die xml_collection_id des Datentyps für die Spalte, wie in sys.columns angegeben. Diese Spalte gibt NULL zurück, wenn der zurückgegebene Typ keiner XML Schema Collection zugeordnet ist.
xml_collection_databaseSysname NULLEnthält die Datenbank, in der die XML-Schemaauflistung definiert ist, die diesem Typ zugeordnet wurde. Diese Spalte gibt NULL zurück, wenn der zurückgegebene Typ keiner XML Schema Collection zugeordnet ist.
xml_collection_schemaSysname NULLEnthält das Schema, in dem die XML-Schemaauflistung definiert ist, die diesem Typ zugeordnet wurde. Diese Spalte gibt NULL zurück, wenn der zurückgegebene Typ keiner XML Schema Collection zugeordnet ist.
xml_collection_nameSysname NULLEnthält den Namen der XML-Schemaauflistung, die diesem Typ zugeordnet wurde. Diese Spalte gibt NULL zurück, wenn der zurückgegebene Typ keiner XML Schema Collection zugeordnet ist.
is_xml_documentBit NOT NULLGibt 1 zurück, wenn der zurückgegebene Datentyp XML ist und für diesen Typ garantiert ist, dass es sich um ein vollständiges XML-Dokument (einschließlich eines Stammknotens) handelt, nicht um ein XML-Fragment. Andernfalls wird 0 zurückgegeben.
is_case_sensitiveBit NOT NULLGibt 1 zurück, wenn die Spalte einen Zeichenfolgentyp darstellt, bei dem die Groß-/Kleinschreibung beachtet wird, andernfalls 0.
is_fixed_length_clr_typeBit NOT NULLGibt 1 zurück, wenn die Spalte ein CLR-Typ mit fester Länge ist, andernfalls 0.
source_serversysnameDer Name des ursprünglichen Servers, der von der Spalte in diesem Ergebnis zurückgegeben wurde (bei einem Remoteserver). Der Name wird angegeben, wie er in "sys.servers" angezeigt wird. Gibt NULL zurück, wenn die Spalte vom lokalen Server stammt oder der ursprüngliche Server nicht ermittelt werden konnte. Wird nur aufgefüllt, wenn die Suche nach Informationen erforderlich ist.
QuelldatenbanksysnameDer Name der ursprünglichen Datenbank, die von der Spalte in diesem Ergebnis zurückgegeben wird. Gibt NULL zurück, wenn die Datenbank nicht ermittelt werden kann. Wird nur aufgefüllt, wenn die Suche nach Informationen erforderlich ist.
source_schemasysnameDer Name des ursprünglichen Schemas, das von der Spalte in diesem Ergebnis zurückgegeben wird. Gibt NULL zurück, wenn das Schema nicht bestimmt werden kann. Wird nur aufgefüllt, wenn die Suche nach Informationen erforderlich ist.
source_tablesysnameDer Name der ursprünglichen Tabelle, die von der Spalte in diesem Ergebnis zurückgegeben wird. Gibt NULL zurück, wenn die Tabelle nicht bestimmt werden kann. Wird nur aufgefüllt, wenn die Suche nach Informationen erforderlich ist.
source_columnsysnameDer Name der ursprünglichen Spalte, die von der Ergebnisspalte zurückgegeben wird. Gibt NULL zurück, wenn die Spalte nicht bestimmt werden kann. Wird nur aufgefüllt, wenn die Suche nach Informationen erforderlich ist.
is_identity_columnNULL-BitGibt 1 zurück, wenn die Spalte eine Identitätsspalte ist, andernfalls 0. Gibt NULL zurück, wenn nicht ermittelt werden kann, ob die Spalte eine Identitätsspalte ist.
is_part_of_unique_keyNULL-BitGibt 1 zurück, wenn die Spalte Teil eines eindeutigen Index (einschließlich UNIQUE- und PRIMARY-Einschränkung) ist, andernfalls 0. Gibt NULL zurück, wenn nicht ermittelt werden kann, ob die Spalte Teil eines eindeutigen Indexes ist. Wird nur aufgefüllt, wenn die Suche nach Informationen erforderlich ist.
is_updateableNULL-BitGibt 1 zurück, wenn die Spalte aktualisiert werden kann, andernfalls 0. Gibt NULL zurück, wenn nicht ermittelt werden kann, ob die Spalte aktualisiert werden kann.
is_computed_columnNULL-BitGibt 1 zurück, wenn die Spalte eine berechnete Spalte, andernfalls 0. Gibt NULL zurück, wenn nicht ermittelt werden kann, ob die Spalte eine berechnete Spalte ist.
is_sparse_column_setNULL-BitGibt 1 zurück, wenn die Spalte eine Spalte mit geringer Dichte ist, andernfalls 0. Gibt NULL zurück, wenn nicht ermittelt werden kann, dass die Spalte Teil eines spaltensatzes mit geringer Dichte ist.
ordinal_in_order_by_list"smallint" NULLDie Position dieser Spalte in der ORDER BY-Liste. Gibt NULL zurück, wenn die Spalte in der ORDER BY-Liste nicht angezeigt wird, oder wenn ORDER BY-Liste nicht eindeutig bestimmt werden kann.
order_by_list_length"smallint" NULLDie Länge der ORDER BY-Liste. Gibt NULL zurück, wenn keine ORDER BY-Liste vorhanden ist oder die ORDER BY-Liste nicht eindeutig bestimmt werden kann. Beachten Sie, dass dieser Wert für alle von zurückgegebenen Zeilen gleich bleiben Sp_describe_first_result_set.
order_by_is_descending"smallint" NULLWenn Ordinal_in_order_by_list nicht NULL, ist die Order_by_is_descending Spalte meldet die Richtung der ORDER BY-Klausel für diese Spalte. Andernfalls wird NULL gemeldet.
tds_type_idInt NOT NULLFür die interne Verwendung.
tds_lengthInt NOT NULLFür die interne Verwendung.
tds_collation_idInt NULLFür die interne Verwendung.
tds_collation_sort_id"tinyint" NULLFür die interne Verwendung.

Sp_describe_first_result_set wird sichergestellt, dass wenn die Prozedur das erste Resultset-Metadaten für die (eines hypothetischen) zurückgibt Batch ein, und dieser Batch ist (A) anschließend klicken Sie dann den Batch ausgeführt werden, entweder (1), (2) einen Laufzeitfehler auslöst, (3) kein Resultset zurückgegeben oder (4) gibt eine erste Resultset mit den gleichen Metadaten beschriebenen löst einen Fehler Optimierungszeit Sp_describe_first_result_set.

Der Name, die NULL-Zulässigkeit und der Datentyp können abweichen. Wenn Sp_describe_first_result_set gibt ein leeres Resultset die Garantie ist, dass der Batchausführung keine Resultsets zurückgeben.

Dabei wird vorausgesetzt, dass keine relevanten Schemaänderungen auf dem Server vorgenommen wurden. Relevanten schemaänderungen auf dem Server nicht einschließen, Erstellen von temporären Tabellen oder Tabellenvariablen im Batch zwischen dem Zeitpunkt, Sp_describe_first_result_set aufgerufen wird und die Zeit, die das Resultset, während der Ausführung zurückgegeben wird, wie schemaänderungen durch Batch b

Sp_describe_first_result_set in den folgenden Fällen einen Fehler zurück.

  • Wenn die Eingabe @tsql ist kein gültiger Transact-SQL Batch. Gültigkeit wird bestimmt durch Analysieren der Transact-SQL Batch. Alle Fehler, die durch den Batch verursacht während der abfrageoptimierung oder-Ausführung nicht berücksichtigt, wenn festlegen, ob die Transact-SQL Batch ist gültig.

  • Wenn @params ist nicht NULL und enthält eine Zeichenfolge, die sich keine syntaktisch gültige deklarationszeichenfolge für Parameter, oder wenn es sich um eine Zeichenfolge enthält, deklariert einen Parameter mehr als einmal.

  • Wenn die Eingabe Transact-SQL eingabebatch deklariert eine lokale Variable mit demselben Namen gemäß der Deklaration eines Parameters in @params.

  • Die Anweisung verwendet eine temporäre Tabelle.

  • Die Abfrage umfasst die Erstellung einer dauerhaften Tabelle, die dann abgefragt wird.

Wenn alle anderen Überprüfungen erfolgreich sind, werden alle möglichen Ablaufsteuerungspfade im Eingabebatch berücksichtigt. Diese berücksichtigt alle Anweisungen zur ablaufsteuerung (GOTO, IF/ELSE, WHILE, und Transact-SQL TRY/CATCH-Blöcke) sowie alle Prozeduren, dynamische Transact-SQL Batches oder Trigger, die vom eingabebatch aufgerufen werden, indem eine EXEC-Anweisung, eine DDL-Anweisung, die bewirkt, dass DDL-Trigger ausgelöst werden oder eine DML-Anweisung, die bewirkt, dass Trigger ausgelöst werden in einer Zieltabelle oder für eine Tabelle, die aufgrund von kaskadierenden Aktion auf eine foreign Key-Einschränkung geändert wird. Bei einer Vielzahl möglicher Steuerelementpfade wird der Algorithmus irgendwann beendet.

Für jede ablaufsteuerungspfads die erste Anweisung (falls vorhanden), die gibt ein Resultset richtet sich nach Sp_describe_first_result_set.

Bei mehreren möglichen ersten Anweisungen in einem Batch kann sich das jeweilige Ergebnis im Hinblick auf die Anzahl der Spalten, die Spaltennamen, die NULL-Zulässigkeit und den Datentyp unterscheiden. Im Folgenden wird ausführlicher erläutert, wie diese Unterschiede gehandhabt werden:

  • Wenn sich die Anzahl der Spalten unterscheidet, wird ein Fehler ausgelöst, und es wird kein Ergebnis zurückgegeben.

  • Wenn der Spaltenname abweicht, wird der zurückgegebene Spaltenname auf NULL festgelegt.

  • Wenn die NULL-Zulässigkeit abweicht, sind NULL-Werte in der zurückgegebenen NULL-Zulässigkeit zulässig.

  • Wenn der Datentyp abweicht, wird ein Fehler ausgelöst, und nur in folgenden Fällen wird ein Ergebnis zurückgegeben:

    • varchar(a) auf varchar(a') , in denen ein "> ein.

    • varchar(a) auf varchar(max)

    • nvarchar(a) auf nvarchar(a') , in denen ein "> ein.

    • nvarchar(a) auf nvarchar(max)

    • varbinary(a) auf varbinary(a') , in denen ein "> ein.

    • varbinary(a) auf varbinary(max)

Sp_describe_first_result_set unterstützt keine Indirekte Rekursion.

Erfordert die Berechtigung zum Ausführen der @tsql Argument.

Typische Beispiele

A. Einfaches Beispiel

Im folgenden Beispiel wird das von einer einzelnen Abfrage zurückgegebene Resultset beschrieben.

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

Im folgenden Beispiel wird das von einer einzelnen Abfrage mit einem Parameter zurückgegebene Resultset veranschaulicht.

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. Beispielen für Durchsuchenmodi

In den folgenden drei Beispielen wird der Hauptunterschied zwischen den unterschiedlichen Modi für die Informationssuche veranschaulicht. In den Abfrageergebnissen waren nur die relevanten Spalten enthalten.

Beispiel mit dem Wert 0, der angibt, dass keine Informationen zurückgegeben werden.

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;  

Im Folgenden finden Sie das Resultset.

is_hiddencolumn_ordinalnamesource_schemasource_tablesource_columnis_part_of_unique_key
01b3NULLNULLNULLNULL

Beispiel mit dem Wert 1, der angibt, dass Informationen so zurückgegeben werden, als ob in der Abfrage eine FOR BROWSE-Option eingeschlossen wäre.

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

Im Folgenden finden Sie das Resultset.

is_hiddencolumn_ordinalnamesource_schemasource_tablesource_columnis_part_of_unique_key
01b3dbotB10
12adbota1

Beispiel mit dem Wert 2, der angibt, dass die Analyse erfolgt, als ob Sie einen Cursor vorbereiteten.

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

Im Folgenden finden Sie das Resultset.

is_hiddencolumn_ordinalnamesource_schemasource_tablesource_columnis_part_of_unique_key
01B3dbovB20
12ROWSTATNULLNULLNULL0

Beispiele für Probleme

In den folgenden Beispielen werden zwei Tabellen für alle Beispiele verwendet. Führen Sie die folgenden Anweisungen aus, um die Beispieltabellen zu erstellen.

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

Fehler aufgrund unterschiedlicher Spaltenanzahl

Die Anzahl der Spalten in möglichen ersten Resultsets weicht in diesem Beispiel ab.

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

Fehler aufgrund abweichender Datentypen

Die Spaltentypen unterscheiden sich in verschiedenen möglichen ersten Resultsets.

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

Ergebnis: Fehler, nicht übereinstimmende Typen (Int im Vergleich zu "smallint").

Spaltenname kann nicht bestimmt werden

Die Spalten in möglichen ersten Resultsets unterscheiden sich hinsichtlich der Länge für identische Typen mit variabler Länge, NULL-Zulässigkeiten und Spaltennamen:

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

Ergebnis: > varchar(20) NULL

Spaltenname mit durch Aliasing erzwungenem identischem Spaltennamen

Analog zum vorherigen, die Namen der Spalten sind jedoch aufgrund von Spaltenaliasing identisch.

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

Ergebnis: b Varchar (20) NULL

Fehler aufgrund nicht zuzuordnender Spaltentypen

Die Spaltentypen unterscheiden sich in verschiedenen möglichen ersten Resultsets.

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

Ergebnis: Fehler, nicht übereinstimmende Typen (varchar(10) im Vergleich zu nvarchar(10)).

Resultset kann einen Fehler zurückgeben

Das erste Resultset ist Fehler oder Resultset.

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

Ergebnis: eine IntNULL

Einige Codepfade geben keine Ergebnisse zurück

Der erste Resultset ist NULL oder ein Resultset.

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

Ergebnis: eine IntNULL

Ergebnis von dynamischem SQL

Das erste Resultset ist dynamisches SQL, das ermittelt werden kann, da es sich um eine Literalzeichenfolge handelt.

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

Ergebnis: eine INT NULL

Ergebnisfehler von dynamischem SQL

Das erste Resultset ist aufgrund von dynamischem SQL nicht definiert.

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

Ergebnis: Fehler. Das Ergebnis kann aufgrund von dynamischem SQL nicht ermittelt werden.

Vom Benutzer angegebenes Resultset

Das erste Resultset wird manuell vom Benutzer angegeben.

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

Ergebnis: Column1 "bigint" NOT NULL

Von einem mehrdeutigen Resultset verursachter Fehler

In diesem Beispiel wird davon ausgegangen, dass ein anderer Benutzer mit dem Namen "user1" eine Tabelle mit dem Namen t1 im Standardschema s1 mit Spalten aufweist (eine Int NOT NULL).

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

Ergebnis: Fehler. T1 möglich T1 oder s1.t1, jeweils mit einer unterschiedlichen Anzahl von Spalten.

Ergebnis auch bei mehrdeutigem Resultset

Verwenden Sie die gleichen Annahmen wie im vorherigen Beispiel.

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

Ergebnis: eine Int NULL da dbo.t1.a und s1.t1.a den Typ aufweisen Int NULL- Zulässigkeit unterscheidet.

Sp_describe_undeclared_parameters (Transact-SQL)
Sys. dm_exec_describe_first_result_set (Transact-SQL)
Sys. dm_exec_describe_first_result_set_for_object (Transact-SQL)

Community-Beiträge

HINZUFÜGEN
Anzeigen: