Eksportuj (0) Drukuj
Rozwiń wszystko
Expand Minimize
Ten artykuł był przetłumaczony komputerowo. Oryginalny tekst zobaczysz, umieszczając wskaźnik myszy nad zdaniami w artykule. Więcej informacji.
Tłumaczenie
Oryginał

sp_describe_first_result_set (języka Transact-SQL)

SQL Server 2012

Zwraca metadanych dla pierwszego wyniku możliwych do zestawu Transact-SQLpartii. Zwraca pusty wynik, jeśli partia zwraca żadnych wyników. Zgłasza błąd, jeśli Aparat baz danychnie może określić metadanych dla pierwszej kwerendy, który będzie wykonywany przeprowadzając analizę statycznych. W widoku dynamicznego zarządzania sys.dm_exec_describe_first_result_set (języka Transact-SQL)zwraca te same informacje.

Ikona łącza do tematu Konwencje składni języka Transact-SQL


sp_describe_first_result_set [ @tsql = ] N'Transact-SQL_batch' 
    [ , [ @params = ] N'parameters' ] 
    [ , [ @browse_information_mode = ] <tinyint> ] ]

@tsql = ' Transact-SQL_batch "

Jeden lub więcej Transact-SQLsprawozdań. Transact-SQL_batch may be nvarchar(n) or nvarchar(max).

@params = N' parameters "

@ params zawiera ciąg zgłoszenia parametrów dla Transact-SQLpartii, która jest podobna do procedury sp_executesql. Parametry mogą być nvarchar(n)lub nvarchar(max).

Jest jeden ciąg, który zawiera definicje wszystkie parametry, które zostały osadzone w Transact-SQL_batch. Musi to być stała lub zmienna Unicode. Każda definicja parametru składa się z nazwy parametru i określenia typu danych. n to symbol zastępczy, który wskazuje parametr dodatkowe definicje. Każdy parametr w deklaracji musi być zdefiniowana w @ params. Jeśli Transact-SQLinstrukcji lub partii w instrukcji nie zawiera parametry, @ params nie jest wymagane. NULL jest domyślną wartością dla tego parametru.

@ browse_information_mode = tinyint

Określa, jeżeli dodatkowe kolumny klucza i źródła informacji o tabeli są zwracane. Jeśli ustawiona na 1, każda kwerenda jest analizowany, jeżeli zawiera ono dla PRZEGLĄDAĆ opcji na tej kwerendzie. Zwracane są dodatkowe kolumny klucza i źródła informacji o tabeli.

  • Jeśli ustawiona na 0, nie jest zwracane są informacje.

  • Jeśli ustawiona na 1, każda kwerenda jest analizowany, jeżeli zawiera ono dla PRZEGLĄDAĆ opcji na tej kwerendzie. Ta zwróci nazwy tabeli bazowej jako źródła informacji o kolumnie.

  • Jeśli ustawiona na 2, każda kwerenda jest analizowane tak, jakby byłby on używany w przygotowywaniu lub wykonywanie kursora. Ta zwróci nazwy widoku jako źródła informacji o kolumnie.

sp_describe_first_result_set zawsze zwraca stan 0 w przypadku sukcesu. Jeśli procedura wygeneruje błąd i procedury nazywa się jako RPC, zwraca stan jest zamieszkana przez typ błędu opisanego w kolumnie error_type sys.dm_exec_describe_first_result_set. Jeśli procedura jest wywoływana z Transact-SQL, wartość zwracany jest zawsze zerowa, nawet wtedy, gdy wystąpi błąd.

Wspólne metadanych jest zwracany w metadanych wyniki w wyniku zestaw o jeden wiersz dla każdej kolumny. Każdy wiersz opisuje typ i nullability kolumn w formacie opisane w poniższej sekcji. Jeśli pierwsza instrukcja nie istnieje dla każdej ścieżki kontroli, zwracany jest wynik zestawu wierszy zerowych.

Nazwa kolumny

Typ danych

Opis

is_hidden

bit NOT NULL

Wskazuje, że kolumna jest dodatkowy kolumna dodaje do przeglądania informacji celów i że nie on rzeczywiście się do zestawu wyników.

column_ordinal

int NOT NULL

Zawiera pozycji porządkowej kolumnę w zestawie wyników. Pozycja pierwszej kolumny zostaną określone jako 1.

Nazwa

sysname NULL

Zawiera nazwę kolumny, jeśli nazwa może być określona. W przeciwnym razie będzie zawierać wartość NULL.

is_nullable

bit NOT NULL

Zawiera wartość 1, jeśli kolumny dozwolone są wartości null, 0 Jeśli kolumny nie dopuszcza wartości null, a 1, jeżeli nie można ustalić, jeżeli kolumna dopuszcza wartości null.

system_type_id

int NOT NULL

Zawiera system_type_id typu danych kolumny określone w sys.types. Dla typu CLR nawet jeśli kolumna system_type_name zwróci wartość NULL, ta kolumna zwróci wartość 240.

system_type_name

nvarchar(256) NULL

Zawiera nazwę i argumenty (takich jak długość, precyzja, skala), określone dla typu danych kolumny. Jeśli typ danych jest typ aliasów zdefiniowane przez użytkownika, podstawowy typ systemu jest określona w tym miejscu. Jeśli jest zdefiniowane przez użytkownika typu CLR, zwracana jest wartość NULL w tej kolumnie.

max_length

smallint NOT NULL

Maksymalna długość (w bajtach) kolumny.

-1 = Column data type is varchar(max), nvarchar(max), varbinary(max), or xml.

Dla textkolumny, max_lengthwartość będzie 16 lub wartości ustawionej przez sp_tableoption 'text in row'.

dokładność

tinyint NOT NULL

Precyzję kolumny, jeśli numerycznego. W przeciwnym przypadku zwraca 0.

skala

tinyint NOT NULL

Skalę kolumny jeśli numerycznego. W przeciwnym przypadku zwraca 0.

collation_name

sysname NULL

Nazwa sortowania kolumny jeśli znakowym. W przeciwnym wypadku zwraca wartość NULL.

user_type_id

int NULL

Środowisko CLR i aliasu typów zawiera user_type_id typu danych kolumny określone w sys.types. W przeciwnym razie ma wartość NULL.

user_type_database

sysname NULL

Środowisko CLR i aliasu typów zawiera nazwę bazy danych, w której określony jest typ. W przeciwnym razie ma wartość NULL.

user_type_schema

sysname NULL

Środowisko CLR i aliasu typów zawiera nazwę schematu, w której określony jest typ. W przeciwnym razie ma wartość NULL.

user_type_name

sysname NULL

Środowisko CLR i aliasu typów zawiera nazwę typu. W przeciwnym razie ma wartość NULL.

assembly_qualified_type_name

nvarchar(4000)

Dla typu CLR zwraca nazwę zestawu i Klasa definiująca typ. W przeciwnym razie ma wartość NULL.

xml_collection_id

int NULL

Zawiera xml_collection_id typu danych kolumny określone w sys.columns. W tej kolumnie zwróci wartość NULL, jeśli typ zwracany nie jest skojarzony z kolekcji schematów XML.

xml_collection_database

sysname NULL

Zawiera bazę danych, w której zdefiniowano kolekcji schematów XML skojarzony z tego typu. W tej kolumnie zwróci wartość NULL, jeśli typ zwracany nie jest skojarzony z kolekcji schematów XML.

xml_collection_schema

sysname NULL

Zawiera schemat, w której zdefiniowano kolekcji schematów XML skojarzony z tego typu. W tej kolumnie zwróci wartość NULL, jeśli typ zwracany nie jest skojarzony z kolekcji schematów XML.

xml_collection_name

sysname NULL

Zawiera nazwę kolekcji schematów XML skojarzony z tego typu. W tej kolumnie zwróci wartość NULL, jeśli typ zwracany nie jest skojarzony z kolekcji schematów XML.

is_xml_document

bit NOT NULL

Zwraca 1, jeżeli jest typ zwracanych danych XML i tego typu jest gwarantowane jest kompletnym dokumentem XML (w tym węzeł główny), w przeciwieństwie do fragmentu XML). W przeciwnym przypadku zwraca 0.

is_case_sensitive

bit NOT NULL

Zwraca wartość 1, jeśli kolumna jest typu ciąg liter i 0, jeśli nie jest on.

is_fixed_length_clr_type

bit NOT NULL

Zwraca wartość 1, jeśli kolumna jest typu CLR o stałej długości i 0, jeśli nie jest on.

source_server

sysname

Nazwa serwera pochodzących z zwrócony przez kolumny w ten wynik (jeżeli pochodzi z serwera zdalnego). Nazwa nadana pojawiającą się w sys.servers. Zwraca wartość NULL, jeśli kolumna pochodzi na serwerze lokalnym lub nie można go określić serwer, który pochodzi z. Tylko jest wypełniona żądanie informacji o przeglądaniu.

source_database

sysname

Nazwa pochodzących z bazy danych zwróconych przez kolumny w ten wynik. Zwraca wartość NULL, jeśli baza danych nie może być ustalona. Tylko jest wypełniona żądanie informacji o przeglądaniu.

source_schema

sysname

Nazwa pochodzące Schemat zwrócony przez kolumny w ten wynik. Zwraca wartość NULL, jeśli schemat nie może zostać ustalona. Tylko jest wypełniona żądanie informacji o przeglądaniu.

source_table

sysname

Nazwa pochodzących z tabeli zwrócone przez kolumny w ten wynik. Zwraca wartość NULL, jeśli tabela nie może być ustalona. Tylko jest wypełniona żądanie informacji o przeglądaniu.

source_column

sysname

Nazwa pochodzących z kolumn zwróconych przez kolumnę wynik. Zwraca wartość NULL, jeśli kolumna nie może być ustalona. Tylko jest wypełniona żądanie informacji o przeglądaniu.

is_identity_column

bit NULL

Zwraca wartość 1, jeśli kolumna jest kolumna tożsamooci i 0, jeśli nie. Zwraca wartość NULL, jeśli nie można określić, że kolumna jest to kolumna identyfikacji.

is_part_of_unique_key

bit NULL

Zwraca 1 Jeśli kolumna jest częścią unikatowego indeksu (w tym ograniczenie unikatowe i podstawowego) i 0, jeśli nie. Zwraca wartość NULL, jeśli nie można określić, że kolumna jest częścią unikatowego indeksu. Wypełniana tylko jeśli wymagana jest informacji o przeglądaniu.

is_updateable

bit NULL

Zwraca 1, jeżeli kolumna jest aktualizować i 0, jeśli nie. Zwraca wartość NULL, jeśli nie można określić, że kolumna jest aktualizować.

is_computed_column

bit NULL

Zwraca wartość 1, jeśli kolumna jest kolumną obliczaną i 0, jeśli nie. Zwraca wartość NULL, jeśli nie można określić, że kolumna jest kolumną obliczaną.

is_sparse_column_set

bit NULL

Zwraca wartość 1, jeśli kolumna jest rozrzedzony kolumny i 0, jeśli nie. Zwraca wartość NULL, jeśli nie można określić, że kolumna jest częścią zestawu rozrzedzony kolumny.

ordinal_in_order_by_list

smallint NULL

Pozycja ta kolumna liście ORDER BY. Zwraca wartość NULL, jeśli kolumna nie jest wyświetlana na liście ORDER BY lub na liście ORDER BY nie można jednoznacznie ustalić.

order_by_list_length

smallint NULL

Długość listy ORDER BY. Zwraca wartość NULL, jeśli istnieje wykaz ORDER BY lub na liście ORDER BY nie można jednoznacznie ustalić. Należy zauważyć, że wartość ta będzie taka sama dla wszystkich wierszy zwracanych przez sp_describe_first_result_set.

order_by_is_descending

smallint NULL

Jeśli ordinal_in_order_by_list nie ma wartości NULL, order_by_is_descending kolumny raporty kierunku klauzuli ORDER BY, dla tej kolumny. W przeciwnym razie raporty NULL.

tds_type_id

int NOT NUL

Do użytku wewnętrznego.

tds_length

int NOT NUL

Do użytku wewnętrznego.

tds_collation_id

int NUL

Do użytku wewnętrznego.

tds_collation_sort_id

tinyint NUL

Do użytku wewnętrznego.

sp_describe_first_result_set gwarancji, że jeżeli procedura zwraca pierwszy metadanych zestaw wyników za (hipotetyczną) partii a tej partii (A) jest następnie wykonywać i następnie partii będzie (1) zgłasza błąd czasu optymalizacji, (2) podnosi błąd w czasie wykonywania, (3) zwraca nie zestawu wyników lub (4) zwraca wynik pierwszy z tych samych metadanych opisane przez sp_describe_first_result_set.

Typ nazwy, nullability i dane mogą się różnić. Jeśli sp_describe_first_result_set zwraca zestaw wyników puste, gwarancja jest, że wykonanie partii będzie zwracać zestawów wyników nr.

Gwarancja ta zakłada, istnieją żadne zmiany odpowiednich schematu na serwerze. Schemat odpowiednich zmian na serwerze nie obejmują tworzenie tabel tymczasowych lub tabeli zmienne w partii a między momentem, który sp_describe_first_result_set nazywa się i czas, który zestaw wyników jest zwracany podczas wykonywania, w tym zmian schematu wprowadzonych przez partii B.

sp_describe_first_result_set zwraca błąd w każdym z poniższych przypadków.

  • Jeśli wprowadzania tsql @ nie jest prawidłowy Transact-SQLpartii. Okres ważności jest określana przez przetwarzanie i analizowanie Transact-SQLpartii. Błędy spowodowane przez partii podczas optymalizacji kwerendy lub podczas wykonywania nie są uważane za przy określaniu czy Transact-SQLpartii jest prawidłowa.

  • Jeżeli @ params nie jest równa NULL i zawiera ciąg, który nie jest to ciąg zgłoszenia syntaktycznie prawidłowa dla parametrów, lub jeśli zawiera ciąg, który deklaruje dowolnego parametru więcej niż jeden raz.

  • Jeśli dane wejściowe Transact-SQLpartii deklaruje zmienną lokalną o tej samej nazwie jako parametr zadeklarowane w @ params.

  • Jeśli deklaracja używa tabeli tymczasowej.

  • Kwerenda obejmuje stworzenie stałych tabela, która jest następnie kwerenda.

Jeśli wszystkie inne testy zakończą się pomyślnie, uważa się wszystkie możliwości kontroli przepływu ścieżki wewnątrz wejścia partii. Ten bierze pod uwagę wszystkie kontroli przepływów (GOTO, podczas gdy/ELSE, i Transact-SQLbloków TRY/CATCH) jak również wszelkie procedury, dynamiczne Transact-SQLpartii lub wyzwalacze wywoływane z wejścia partii przez instrukcję EXEC, instrukcji DDL, powodujący wyzwalacze DDL do opalania lub instrukcji LŚD, powodujący wyzwalaczy do opalania, w tabeli docelowej lub na tabeli, który jest modyfikowany z powodu kaskadowych działania na ograniczenie na klucz obcy. W przypadku o wiele ścieżek kontrolę w pewnym momencie algorytmu zatrzymuje.

Dla każdej ścieżki przepływ sterowania, pierwsza instrukcja (jeśli istnieją), zwraca zestaw wyników jest określana przez sp_describe_first_result_set.

Gdy wiele możliwych pierwszego sprawozdania znajdują się w partii, ich wyniki mogą się różnić w polu Liczba kolumn, nazwa kolumny, nullability i typ danych. Jak różnice te są obsługiwane jest opisany bardziej szczegółowo tutaj:

  • Jeśli różni się liczba kolumn, zostanie zgłoszony błąd i zwracana jest żadnego wyniku.

  • Jeśli różni się nazwę kolumny, zwracana nazwa kolumny jest równa NULL.

  • Go, który różni się nullability, nullability, zwracane będą dopuszcza wartości null.

  • Jeśli typ danych różni się, zostanie zgłoszony błąd i nie wynik jest zwracany z wyjątkiem w następujących przypadkach:

    • varchar(a) do varchar(a')gdzie ' >.

    • varchar(a) na varchar(max)

    • nvarchar(a) do nvarchar(a')gdzie ' >.

    • nvarchar(a) na nvarchar(max)

    • varbinary(a) do varbinary(a')gdzie ' >.

    • varbinary(a) na varbinary(max)

Wymagane jest uprawnienie Wykonywanie argument @ tsql.

Typowymi przykładami

A.Prosty przykład

Na poniższym przykładzie opisano zestaw zwrócony z pojedynczą kwerendę wyników.

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

Poniższy przykład przedstawia zestawie zwróconym przez pojedynczą kwerendę, która zawiera parametr wyników.

sp_describe_first_result_set @tsql = 
N'SELECT object_id, name, type_desc 
FROM sys.indexes 
WHERE object_id = @id1'
, @params = N'@id1 int'
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.Przykłady trybu przeglądania

Następujące trzy przykłady ilustrują kluczowa różnica między Przeglądaj różne tryby informacji. Tylko odpowiednie kolumny zostały uwzględnione w wynikach kwerendy.

Przykład 0 wskazujące brak informacji jest zwracany.

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

Oto zestaw wyników.

is_hidden

column_ordinal

Nazwa

source_schema

source_table

source_column

is_part_of_unique_key

0

1

B3

NULL

NULL

NULL

NULL

Przykład 1 wskazujący, że zwraca informacje, jeżeli zawiera ono dla PRZEGLĄDAĆ opcji na tej kwerendzie.

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

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

Oto zestaw wyników.

is_hidden

column_ordinal

Nazwa

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

Przykład 2 wskazujące analizowane, a Jeśli przygotowujesz kursor.

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

Oto zestaw wyników.

is_hidden

column_ordinal

Nazwa

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

Przykłady problemów

Poniższe przykłady używania tabel dla wszystkich przykładach. Wykonać następujące instrukcje do tworzenia tabel przykład.

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

Błąd ponieważ różnią się liczba kolumn

Liczba kolumn w możliwie pierwsze zestawy wyników różnią się w tym przykładzie.

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

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

Błąd ponieważ różne typy danych

Typy kolumn są różne w różnych możliwych pierwsze zestawy wyników.

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

Wynik: Błąd, niezgodne typy ( int vs. smallint ).

Nie można ustalić nazwę kolumny

Kolumny w możliwie pierwsze zestawy wyników może różnić się długość tych samych nazw typu, nullability i kolumny o zmiennej długości:

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

Wynik: <nieznana nazwa kolumny> varchar(20) NULL

Nazwa kolumny musieli być identyczne przez wygładzanie

Sam, jak poprzedni, ale kolumny mają taką samą nazwę za pomocą kolumny wygładzanie.

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

Wynik: bvarchar(20)NULL

Błąd ponieważ typy kolumn nie mogą być dopasowane

Typy kolumn są różne w różnych możliwości najpierw zestawy wyników.

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

Wynik: Błąd, niezgodne typy (varchar(10) vs. nvarchar(10) ).

Zestaw wyników może zwracać błąd

Po raz pierwszy prowadzić zestaw jest błąd lub wynik.

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

Wynik:intNULL

Niektóre ścieżki kodu zwracają żadnych wyników

Pierwszy zestaw wyników jest null lub zestaw wyników.

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

Wynik:intNULL

W wyniku dynamiczne SQL

Pierwszy zestaw wyników jest dynamiczne SQL, który jest wykrywalne, ponieważ jest literałem ciągu znaków.

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

Wynik:INT NULL

Wynik awarii z dynamicznym SQL

Pierwszy zestaw wyników jest niezdefiniowana ze względu na dynamiczne SQL.

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

Wynik: błąd. Wynik nie jest wykrywalne ze względu na dynamiczne SQL.

Wynik określony przez użytkownika zestaw

Pierwszy zestaw wyników jest określona ręcznie przez użytkownika.

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

Wynik: Kolumna1bigint NOT NULL

Błąd spowodowany przez wynik niejednoznaczny zestawu

W tym przykładzie założono, że innego użytkownika o nazwie user1 ma tabelę o nazwie t1 w s1 schemat domyślny z kolumnami ( int NOT NULL).

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

Wynik: błąd. t1może być dbo.t1 lub s1.t1, z różną liczbę kolumn.

Doprowadzić nawet z zestawu niejednoznacznych wyników

W poprzednim przykładzie, należy użyć tych samych założeń.

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

Wynik: int NULLponieważ typu dbo.t1.a i s1.t1.a int i różne nullability.

Zawartość społeczności

Dodaj
Pokaż:
© 2014 Microsoft