sp_describe_first_result_set (Transact-SQL)
Gibt die Metadaten für das erste mögliche Resultset des Transact-SQL-Batchs zurück. Gibt ein leeres Resultset zurück, wenn vom Batch keine Ergebnisse zurückgegeben werden. Löst einen Fehler aus, wenn die Metadaten für die erste Abfrage, die mit einer statischen Analyse ausgeführt wird, von Database Engine (Datenbankmodul) nicht bestimmt werden können. Die gleichen Informationen werden von der dynamischen Verwaltungssicht sys.dm_exec_describe_first_result_set (Transact-SQL) zurückgegeben.
Transact-SQL-Syntaxkonventionen
Syntax
sp_describe_first_result_set [ @tsql = ] N'Transact-SQL_batch'
[ , [ @params = ] N'parameters' ]
[ , [ @browse_information_mode = ] <tinyint> ] ]
Argumente
[ @tsql = ] 'Transact-SQL_batch'
Eine oder mehrere Transact-SQL-Anweisungen. Transact-SQL_batch kann vom Typ nvarchar(n) oder nvarchar(max) sein.[ @params = ] N'parameters'
@params stellt eine Parameterdeklarationszeichenfolge für den Transact-SQL-Batch analog zu sp_executesql bereit. Die Parameter können nvarchar(n) oder nvarchar(max) sein.Eine Zeichenfolge, die die Definitionen aller im Transact-SQL_batch eingebetteten Parameter enthält. Die Zeichenfolge muss eine Unicode-Konstante oder eine Unicode-Variable sein. Jede Parameterdefinition besteht aus einem Parameternamen und einem Datentyp. Dabei ist n ein Platzhalter für zusätzliche Parameterdefinitionen. Jeder in Parameter in der Anweisung muss in @params definiert werden. Wenn die Transact-SQL-Anweisung oder der -Batch in der Anweisung keine Parameter enthalten, ist @params nicht erforderlich. Der Standardwert für diesen Parameter ist NULL.
[ @browse_information_mode = ] tinyint
Gibt an, ob zusätzliche Schlüsselspalten und Quelltabelleninformationen zurückgegeben werden. Bei 1 werden alle Abfragen so analysiert, als ob die FOR BROWSE-Option in der Abfrage enthalten wäre. Zusätzliche Schlüsselspalten und Quelltabelleninformationen werden zurückgegeben.Bei 0 werden keine Informationen zurückgegeben.
Bei 1 werden alle Abfragen so analysiert, als ob die FOR BROWSE-Option in der Abfrage enthalten wäre. 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.
Rückgabecodewerte
sp_describe_first_result_set gibt bei erfolgreicher Ausführung immer einen Status von 0 (null) zurück. Wenn die Prozedur einen Fehler auslöst und die Prozedur als RPC aufgerufen wird, wird der Rückgabestatus durch den in der error_type-Spalte von sys.dm_exec_describe_first_result_set beschriebenen Fehlertyp aufgefüllt. Wenn die Prozedur von Transact-SQL aufgerufen wird, ist der Rückgabewert immer 0; dies gilt auch bei einem Fehler.
Resultsets
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.
Spaltenname |
Datentyp |
Beschreibung |
---|---|---|
is_hidden |
bit NOT NULL |
Gibt an, dass es sich bei der Spalte um eine zusätzliche Spalte zum Suchen von Informationen handelt, die nicht im Resultset angezeigt wird. |
column_ordinal |
int NOT NULL |
Enthält die Ordnungsposition der Spalte im Resultset. Die Position der ersten Spalte wird mit 1 angegeben. |
name |
sysname NULL |
Enthält den Namen der Spalte, wenn ein Name bestimmt werden kann. Andernfalls NULL. |
is_nullable |
bit NOT NULL |
Enthä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_id |
int NOT NULL |
Enthält die system_type_id des Datentyps für die Spalte, wie in sys.types angegeben. Bei CLR-Typen wird von dieser Spalte der Wert 240 zurückgegeben, obwohl NULL von der system_type_name-Spalte zurückgegeben wird. |
system_type_name |
nvarchar(256) NULL |
Enthä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_length |
smallint NOT NULL |
Maximale Länge (in Byte) für die Spalte. -1 = Spaltendatentyp ist varchar(max), nvarchar(max), varbinary(max) oder xml. Für text-Spalten ist der max_length-Wert 16 oder der von sp_tableoption 'text in row' festgelegte Wert. |
precision |
tinyint NOT NULL |
Die Genauigkeit der Spalte, wenn sie auf numerischen Werten basiert. Andernfalls wird 0 zurückgegeben. |
scale |
tinyint NOT NULL |
Die Skalierung der Spalte, wenn sie auf numerischen Werten basiert. Andernfalls wird 0 zurückgegeben. |
collation_name |
sysname NULL |
Name der Sortierung der Spalte, wenn diese zeichenbasiert ist. Andernfalls wird NULL zurückgegeben. |
user_type_id |
int NULL |
Enthält bei CLR- und Aliastypen die user_type_id des Datentyps der Spalte, wie in sys.types angegeben. Andernfalls NULL. |
user_type_database |
sysname NULL |
Enthält bei CLR- und Aliastypen den Namen der Datenbank, in der der Typ definiert wurde. Andernfalls NULL. |
user_type_schema |
sysname NULL |
Enthält bei CLR- und Aliastypen den Namen des Schemas, in dem der Typ definiert wurde. Andernfalls NULL. |
user_type_name |
sysname NULL |
Enthält bei CLR- und Aliastypen den Namen des Typs. Andernfalls NULL. |
assembly_qualified_type_name |
nvarchar(4000) |
Gibt bei CLR-Typen den Namen der Assembly und der Klasse zurück, die den Typ definieren. Andernfalls NULL. |
xml_collection_id |
int NULL |
Enthält die xml_collection_id des Datentyps der Spalte, wie in sys.columns angegeben. Diese Spalte gibt NULL zurück, wenn der zurückgegebene Typ keiner XML-Schemaauflistung zugeordnet ist. |
xml_collection_database |
sysname NULL |
Enthä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-Schemaauflistung zugeordnet ist. |
xml_collection_schema |
sysname NULL |
Enthä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-Schemaauflistung zugeordnet ist. |
xml_collection_name |
sysname NULL |
Enthält den Namen der XML-Schemaauflistung, die diesem Typ zugeordnet wurde. Diese Spalte gibt NULL zurück, wenn der zurückgegebene Typ keiner XML-Schemaauflistung zugeordnet ist. |
is_xml_document |
bit NOT NULL |
Gibt 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_sensitive |
bit NOT NULL |
Gibt 1 zurück, wenn die Spalte einen Zeichenfolgentyp darstellt, bei dem die Groß-/Kleinschreibung beachtet wird, andernfalls 0. |
is_fixed_length_clr_type |
bit NOT NULL |
Gibt 1 zurück, wenn die Spalte ein CLR-Typ mit fester Länge ist, andernfalls 0. |
source_server |
sysname |
Der Name des ursprünglichen Servers, der von der Spalte in diesem Ergebnis zurückgegeben wurde (bei einem Remoteserver). Der Name wird wie in sys.servers angegeben. 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. |
source_database |
sysname |
Der 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_schema |
sysname |
Der 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_table |
sysname |
Der 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_column |
sysname |
Der 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_column |
bit NULL |
Gibt 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_key |
bit NULL |
Gibt 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_updateable |
bit NULL |
Gibt 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_column |
bit NULL |
Gibt 1 zurück, wenn die Spalte berechnet wird, andernfalls 0. Gibt NULL zurück, wenn nicht ermittelt werden kann, ob die Spalte eine berechnete Spalte ist. |
is_sparse_column_set |
bit NULL |
Gibt 1 zurück, wenn die Spalte eine Spalte mit geringer Dichte ist, andernfalls 0. Gibt NULL zurück, wenn nicht ermittelt werden kann, ob die Spalte Teil eines Spaltensatzes mit geringer Dichte ist. |
ordinal_in_order_by_list |
smallint NULL |
Die Position dieser Spalte in der ORDER BY-Liste. Gibt NULL zurück, wenn die Spalte nicht in der ORDER BY-Liste angezeigt wird oder die ORDER BY-Liste nicht eindeutig bestimmt werden kann. |
order_by_list_length |
smallint NULL |
Die 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 alle von sp_describe_first_result_set zurückgegebenen Zeilen gleich ist. |
order_by_is_descending |
smallint NULL |
Wenn ordinal_in_order_by_list nicht NULL ist, wird von der order_by_is_descending-Spalte die Richtung der ORDER BY-Klausel für diese Spalte gemeldet. Andernfalls wird NULL gemeldet. |
tds_type_id |
int NOT NULL |
Für die interne Verwendung. |
tds_length |
int NOT NULL |
Für die interne Verwendung. |
tds_collation_id |
int NULL |
Für die interne Verwendung. |
tds_collation_sort_id |
tinyint NULL |
Für die interne Verwendung. |
Hinweise
Mit sp_describe_first_result_set wird sichergestellt, dass, wenn von der Prozedur die ersten Metadaten für das Resultset eines (hypothetischen) Batchs A zurückgegeben werden und dieser Batch (A) anschließend ausgeführt wird, vom Batch (1) ein Optimierungszeitfehler ausgelöst, (2) ein Laufzeitfehler ausgelöst, (3) kein Resultset zurückgegeben oder (4) ein erstes Resultset mit den Metadaten zurückgegeben wird, die von sp_describe_first_result_set beschrieben werden.
Der Name, die NULL-Zulässigkeit und der Datentyp können abweichen. Wenn sp_describe_first_result_set ein leeres Resultset zurückgibt, wird sichergestellt, dass bei der Batchausführung keine Resultsets zurückgegeben werden.
Dabei wird vorausgesetzt, dass keine relevanten Schemaänderungen auf dem Server vorgenommen wurden. Das Erstellen von temporären Tabellen oder Tabellenvariablen im Batch zwischen dem Zeitpunkt, an dem sp_describe_first_result_set aufgerufen wird, und dem Zeitpunkt, an dem das Resultset bei der Ausführung zurückgegeben wird, zählt ebenso wie Schemaänderungen durch Batch B nicht zu den relevanten Schemaänderungen auf dem Server.
sp_describe_first_result_set gibt einen Fehler zurück, wenn einer der folgenden Fälle zutrifft.
Die @tsql-Eingabe ist kein gültiger Transact-SQL-Batch. Die Gültigkeit wird durch Analysieren des Transact-SQL-Batchs bestimmt. Fehler, die vom Batch im Rahmen der Abfrageoptimierung oder -ausführung ausgelöst werden, bleiben unberücksichtigt, wenn die Gültigkeit des Transact-SQL-Batchs überprüft wird.
@params ist nicht NULL und enthält eine Zeichenfolge, die keine syntaktisch gültige Deklarationszeichenfolge für Parameter darstellt, oder eine Zeichenfolge, die einen Parameter mehrmals deklariert.
Der Transact-SQL-Eingabebatch deklariert eine lokale Variable mit dem gleichen Namen wie ein in @params deklarierter Parameter.
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. Berücksichtigt werden hier alle Ablaufsteuerungsanweisungen (GOTO, IF/ELSE, WHILE und TRY-/CATCH-Blöcke für Transact-SQL) sowie Prozeduren, dynamische Transact-SQL-Batches oder Trigger, die vom Eingabebatch durch eine EXEC-Anweisung aufgerufen werden, DDL-Anweisungen, die DDL-Trigger auslösen oder DML-Anweisungen, die Trigger für Zieltabellen oder Tabellen auslösen, die aufgrund kaskadierender Aktion für eine Fremdschlüsseleinschränkung geändert werden. Bei einer Vielzahl möglicher Steuerelementpfade wird der Algorithmus irgendwann beendet.
Die erste Anweisung, die ggf. ein Resultset zurückgibt, wird für jeden Ablaufsteuerungspfad von sp_describe_first_result_set bestimmt.
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) bis varchar(a'), wobei a' > a.
varchar(a) in varchar(max)
nvarchar(a) bis nvarchar(a'), wobei a' > a.
nvarchar(a) in nvarchar(max)
varbinary(a) bis varbinary(a'), wobei a' > a.
varbinary(a) in varbinary(max)
sp_describe_first_result_set unterstützt keine indirekte Rekursion.
Berechtigungen
Erfordert die Berechtigung zur Ausführung des @tsql-Arguments.
Beispiele
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;
Dies ist das Resultset.
is_hidden |
column_ordinal |
name |
source_schema |
source_table |
source_column |
is_part_of_unique_key |
---|---|---|---|---|---|---|
0 |
1 |
b3 |
NULL |
NULL |
NULL |
NULL |
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
Dies ist das Resultset.
is_hidden |
column_ordinal |
name |
source_schema |
source_table |
source_column |
is_part_of_unique_key |
---|---|---|---|---|---|---|
0 |
1 |
b3 |
dbo |
t |
B1 |
0 |
1 |
2 |
a |
dbo |
t |
a |
1 |
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
Dies ist das Resultset.
is_hidden |
column_ordinal |
name |
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 |
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 (intvs. 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: <Unbekannter Spaltenname> 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) vs. 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: a int NULL
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: a int NULL
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: a 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: Error (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 über eine Tabelle mit dem Namen t1 im Standardschema s1 mit Spalten (int NOT NULL) verfügt.
sp_describe_first_result_set @tsql =
N'
IF(@p > 0)
EXECUTE AS USER = ''user1'';
SELECT * FROM t1;'
, @params = N'@p int'
Ergebnis: Error (Fehler). t1 kann dbo.t1 oder s1.t1 mit einer jeweils unterschiedlichen Spaltenanzahl sein.
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: a int NULL, da dbo.t1.und s1.t1. int aufweisen und sich die NULL-Zulässigkeit unterscheidet.
Siehe auch
Verweis
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)