(0) exportieren Drucken
Alle erweitern
Erweitern Minimieren
Dieser Artikel wurde manuell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

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.

Themenlink (Symbol) Transact-SQL-Syntaxkonventionen

Gilt für: SQL Server (SQL Server 2012 bis aktuelle Version), Windows Azure SQL-Datenbank (Ursprüngliche Version bis aktuelle Version).

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 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 Parameter enthält, die im Transact-SQL_batch eingebettet wurden. 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 Transact-SQL-Anweisung oder -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.

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.

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

Bei text-Spalten beträgt der max_length-Wert 16 oder wird von sp_tableoption 'text in row' festgelegt.

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 sys.servers dargestellt 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 eine berechnete Spalte, 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.

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

Erfordert die Berechtigung zur Ausführung des @tsql-Arguments.

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 (int vs. 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 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: a 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: 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: 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: 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: int NULL, da dbo.t1.a und s1.t1.a den Typ int aufweisen und sich die NULL-Zulässigkeit unterscheidet.

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2014 Microsoft