Bagikan melalui


sp_describe_first_result_set (T-SQL)

Berlaku untuk: Titik akhir analitik SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Platform System (PDW) SQL di Microsoft Fabric Warehouse di Microsoft Fabric

Mengembalikan metadata untuk kumpulan hasil pertama yang mungkin dari batch Transact-SQL. Mengembalikan tataan hasil kosong jika batch tidak mengembalikan hasil. Menimbulkan kesalahan jika Mesin Database tidak dapat menentukan metadata untuk kueri pertama yang akan dijalankan dengan melakukan analisis statis. Tampilan manajemen dinamis sys.dm_exec_describe_first_result_set mengembalikan informasi yang sama.

Konvensi sintaks transact-SQL

Sintaks

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

Argumen

[ @tsql = ] 'tsql'

Satu atau beberapa pernyataan Transact-SQL. @tsql mungkin nvarchar(n) atau nvarchar(max).

[ @params = ] N'params'

@params menyediakan string deklarasi untuk parameter untuk batch Transact-SQL, yang mirip sp_executesqldengan . Parameter mungkin nvarchar (n) atau nvarchar(max).

String yang berisi definisi semua parameter yang disematkan dalam @tsql. String harus berupa konstanta Unicode atau variabel Unicode. Setiap definisi parameter terdiri dari nama parameter dan jenis data. n adalah tempat penampung yang menunjukkan definisi parameter tambahan. Setiap parameter yang ditentukan dalam pernyataan harus ditentukan dalam @params. Jika pernyataan Transact-SQL atau batch dalam pernyataan tidak berisi parameter, @params tidak diperlukan. NULL adalah nilai default untuk parameter ini.

[ @browse_information_mode = ] tinyint

Menentukan apakah kolom kunci tambahan dan informasi tabel sumber dikembalikan. Jika diatur ke 1, setiap kueri dianalisis seolah-olah FOR BROWSE menyertakan opsi pada kueri.

  • Jika diatur ke 0, tidak ada informasi yang dikembalikan.

  • Jika diatur ke 1, setiap kueri dianalisis seolah-olah FOR BROWSE menyertakan opsi pada kueri. Ini mengembalikan nama tabel dasar sebagai informasi kolom sumber.

  • Jika diatur ke 2, setiap kueri dianalisis seolah-olah akan digunakan dalam menyiapkan atau menjalankan kursor. Ini mengembalikan nama tampilan sebagai informasi kolom sumber.

Mengembalikan nilai kode

sp_describe_first_result_set selalu mengembalikan status nol pada keberhasilan. Jika prosedur melemparkan kesalahan dan prosedur disebut sebagai RPC, status pengembalian diisi oleh jenis kesalahan yang dijelaskan dalam kolom sys.dm_exec_describe_first_result_seterror_type . Jika prosedur dipanggil dari Transact-SQL, nilai pengembalian selalu nol, bahkan ketika ada kesalahan.

Tataan hasil

Metadata umum ini dikembalikan sebagai tataan hasil dengan satu baris untuk setiap kolom dalam metadata hasil. Setiap baris menjelaskan jenis dan nullabilitas kolom dalam format yang dijelaskan di bagian berikut. Jika pernyataan pertama tidak ada untuk setiap jalur kontrol, hasil yang ditetapkan dengan baris nol akan dikembalikan.

Nama kolom Jenis data Deskripsi
is_hidden bit Menunjukkan bahwa kolom adalah kolom tambahan yang ditambahkan untuk tujuan informasi penjelajahan dan bahwa kolom tersebut tidak benar-benar muncul dalam tataan hasil. Tidak dapat diubah ke null.
column_ordinal int Berisi posisi ordinal kolom dalam tataan hasil. Posisi kolom pertama ditentukan sebagai 1. Tidak dapat diubah ke null.
name nama sysname Berisi nama kolom jika nama dapat ditentukan. Jika tidak, ini berisi NULL. Dapat diubah ke null.
is_nullable bit Berisi nilai 1 jika kolom mengizinkan NULL, 0 jika kolom tidak mengizinkan NULL, dan 1 jika tidak dapat ditentukan apakah kolom mengizinkan NULL. Tidak dapat diubah ke null.
system_type_id int system_type_id Berisi tipe data kolom seperti yang ditentukan dalam sys.types. Untuk jenis CLR, meskipun system_type_name kolom mengembalikan NULL, kolom ini mengembalikan nilai 240. Tidak dapat diubah ke null.
system_type_name nvarchar(256) Berisi nama dan argumen (seperti panjang, presisi, skala), yang ditentukan untuk jenis data kolom. Jika jenis data adalah jenis alias yang ditentukan pengguna, jenis sistem yang mendasar ditentukan di sini. Jika ini adalah jenis yang ditentukan pengguna CLR, NULL dikembalikan dalam kolom ini. Dapat diubah ke null.
max_length smallint Panjang maksimum (dalam byte) kolom.

-1 = Jenis data kolom adalah varchar(max), nvarchar(max), varbinary(max), atau xml.

Untuk kolom teks , max_length nilainya adalah 16 atau nilai yang ditetapkan oleh sp_tableoption 'text in row'. Tidak dapat diubah ke null.
precision kecil Presisi kolom jika berbasis numerik. Jika tidak, mengembalikan 0. Tidak dapat diubah ke null.
scale kecil Skala kolom jika berbasis numerik. Jika tidak, mengembalikan 0. Tidak dapat diubah ke null.
collation_name nama sysname Nama kolater kolom jika berbasis karakter. Jika tidak, mengembalikan NULL. Dapat diubah ke null.
user_type_id int Untuk jenis CLR dan alias, berisi user_type_id jenis data kolom seperti yang ditentukan dalam sys.types. Jika tidak, adalah NULL. Dapat diubah ke null.
user_type_database nama sysname Untuk jenis CLR dan alias, berisi nama database tempat jenis ditentukan. Jika tidak, adalah NULL. Dapat diubah ke null.
user_type_schema nama sysname Untuk jenis CLR dan alias, berisi nama skema di mana jenis ditentukan. Jika tidak, adalah NULL. Dapat diubah ke null.
user_type_name nama sysname Untuk jenis CLR dan alias, berisi nama jenis . Jika tidak, adalah NULL. Dapat diubah ke null.
assembly_qualified_type_name nvarchar(4000) Untuk jenis CLR, mengembalikan nama rakitan dan kelas yang menentukan jenisnya. Jika tidak, adalah NULL. Dapat diubah ke null.
xml_collection_id int xml_collection_id Berisi tipe data kolom seperti yang ditentukan dalam sys.columns. Kolom ini mengembalikan NULL jika jenis yang dikembalikan tidak terkait dengan kumpulan skema XML. Dapat diubah ke null.
xml_collection_database nama sysname Berisi database tempat kumpulan skema XML yang terkait dengan jenis ini ditentukan. Kolom ini mengembalikan NULL jika jenis yang dikembalikan tidak terkait dengan kumpulan skema XML. Dapat diubah ke null.
xml_collection_schema nama sysname Berisi skema di mana kumpulan skema XML yang terkait dengan jenis ini ditentukan. Kolom ini mengembalikan NULL jika jenis yang dikembalikan tidak terkait dengan kumpulan skema XML. Dapat diubah ke null.
xml_collection_name nama sysname Berisi nama kumpulan skema XML yang terkait dengan tipe ini. Kolom ini mengembalikan NULL jika jenis yang dikembalikan tidak terkait dengan kumpulan skema XML. Dapat diubah ke null.
is_xml_document bit Mengembalikan 1 jika jenis data yang dikembalikan adalah XML dan jenis tersebut dijamin sebagai dokumen XML lengkap (termasuk simpul akar), dibandingkan dengan fragmen XML. Jika tidak, mengembalikan 0. Tidak dapat diubah ke null.
is_case_sensitive bit Mengembalikan 1 jika kolom adalah jenis string peka huruf besar/kecil dan 0 jika tidak. Tidak dapat diubah ke null.
is_fixed_length_clr_type bit Mengembalikan 1 jika kolom adalah jenis CLR dengan panjang tetap dan 0 jika tidak. Tidak dapat diubah ke null.
source_server nama sysname Nama server asal yang dikembalikan oleh kolom dalam hasil ini (jika berasal dari server jarak jauh). Nama diberikan seperti yang muncul di sys.servers. Mengembalikan NULL jika kolom berasal dari server lokal atau jika tidak dapat ditentukan server mana yang berasal darinya. Hanya diisi jika informasi penjelajahan diminta. Dapat diubah ke null.
source_database nama sysname Nama database asal yang dikembalikan oleh kolom dalam hasil ini. Mengembalikan NULL jika database tidak dapat ditentukan. Hanya diisi jika informasi penjelajahan diminta. Dapat diubah ke null.
source_schema nama sysname Nama skema asal yang dikembalikan oleh kolom dalam hasil ini. Mengembalikan NULL jika skema tidak dapat ditentukan. Hanya diisi jika informasi penjelajahan diminta. Dapat diubah ke null.
source_table nama sysname Nama tabel asal yang dikembalikan oleh kolom dalam hasil ini. Mengembalikan NULL jika tabel tidak dapat ditentukan. Hanya diisi jika informasi penjelajahan diminta. Dapat diubah ke null.
source_column nama sysname Nama kolom asal yang dikembalikan oleh kolom hasil. Mengembalikan NULL jika kolom tidak dapat ditentukan. Hanya diisi jika informasi penjelajahan diminta. Dapat diubah ke null.
is_identity_column bit Mengembalikan 1 jika kolom adalah kolom identitas dan 0 jika tidak. Mengembalikan NULL jika tidak dapat ditentukan bahwa kolom adalah kolom identitas. Dapat diubah ke null.
is_part_of_unique_key bit Mengembalikan 1 jika kolom adalah bagian dari indeks unik (termasuk batasan unik dan utama) dan 0 jika tidak. Mengembalikan NULL jika tidak dapat ditentukan bahwa kolom adalah bagian dari indeks unik. Hanya diisi jika informasi penjelajahan diminta. Dapat diubah ke null.
is_updateable bit Mengembalikan 1 jika kolom dapat diperbarui dan 0 jika tidak. Mengembalikan NULL jika tidak dapat ditentukan bahwa kolom dapat diperbarui. Dapat diubah ke null.
is_computed_column bit Mengembalikan 1 jika kolom adalah kolom komputasi dan 0 jika tidak. Mengembalikan NULL jika tidak dapat ditentukan bahwa kolom adalah kolom komputasi. Dapat diubah ke null.
is_sparse_column_set bit Mengembalikan 1 jika kolom adalah kolom jarang dan 0 jika tidak. Mengembalikan NULL jika tidak dapat ditentukan bahwa kolom adalah bagian dari kumpulan kolom jarang. Dapat diubah ke null.
ordinal_in_order_by_list smallint Posisi kolom ini dalam ORDER BY daftar. Mengembalikan NULL jika kolom tidak muncul dalam ORDER BY daftar atau jika ORDER BY daftar tidak dapat ditentukan secara unik. Dapat diubah ke null.
order_by_list_length smallint ORDER BY Panjang daftar. Mengembalikan NULL jika tidak ORDER BY ada daftar atau jika ORDER BY daftar tidak dapat ditentukan secara unik. Nilai ini sama untuk semua baris yang dikembalikan oleh sp_describe_first_result_set. Dapat diubah ke null.
order_by_is_descending smallint ordinal_in_order_by_list Jika tidak NULL, order_by_is_descending kolom melaporkan arah ORDER BY klausa untuk kolom ini. Jika tidak, ia melaporkan NULL. Dapat diubah ke null.
tds_type_id int Untuk penggunaan internal. Tidak dapat diubah ke null.
tds_length int Untuk penggunaan internal. Tidak dapat diubah ke null.
tds_collation_id int Untuk penggunaan internal. Dapat diubah ke null.
tds_collation_sort_id kecil Untuk penggunaan internal. Dapat diubah ke null.

Keterangan

sp_describe_first_result_set menjamin bahwa jika prosedur mengembalikan metadata tataan hasil pertama untuk (hipotetis) batch A dan jika batch tersebut (A) kemudian dijalankan, batch baik:

  • menimbulkan kesalahan waktu pengoptimalan
  • menimbulkan kesalahan run-time
  • tidak mengembalikan tataan hasil
  • mengembalikan tataan hasil pertama dengan metadata yang sama yang dijelaskan oleh sp_describe_first_result_set

Nama, nullability, dan jenis data dapat berbeda. Jika sp_describe_first_result_set mengembalikan tataan hasil kosong, jaminannya adalah bahwa eksekusi batch mengembalikan set tanpa hasil.

Jaminan ini berasumsi tidak ada perubahan skema yang relevan pada server. Perubahan skema yang relevan pada server tidak termasuk membuat tabel sementara atau variabel tabel dalam batch A antara waktu yang sp_describe_first_result_set dipanggil dan waktu kumpulan hasil dikembalikan selama eksekusi, termasuk perubahan skema yang dibuat oleh batch B.

sp_describe_first_result_set mengembalikan kesalahan dalam salah satu kasus berikut:

  • Input @tsql bukan batch Transact-SQL yang valid. Validitas ditentukan dengan mengurai dan menganalisis batch Transact-SQL. Kesalahan apa pun yang disebabkan oleh batch selama pengoptimalan kueri atau selama eksekusi tidak dipertimbangkan saat menentukan apakah batch Transact-SQL valid.

  • @params tidak NULL dan berisi string yang bukan string deklarasi yang valid secara sintis untuk parameter, atau jika berisi string yang mendeklarasikan parameter apa pun lebih dari satu kali.

  • Input batch Transact-SQL mendeklarasikan variabel lokal dengan nama yang sama dengan parameter yang dideklarasikan dalam @params.

  • Pernyataan menggunakan tabel sementara.

  • Kueri menyertakan pembuatan tabel permanen yang kemudian dikueri.

Jika semua pemeriksaan lain berhasil, semua kemungkinan jalur alur kontrol di dalam batch input dipertimbangkan. Ini memperhitungkan semua pernyataan alur kontrol (GOTO, IF/ELSE, , WHILEdan blok Transact-SQL/TRYCATCH) serta prosedur apa pun, batch Transact-SQL dinamis, atau pemicu yang dipanggil dari batch input oleh EXEC pernyataan, pernyataan DDL yang menyebabkan pemicu DDL ditembakkan, atau pernyataan DML yang menyebabkan pemicu ditembakkan pada tabel target atau pada tabel yang dimodifikasi karena tindakan kaskading pada batasan kunci asing. Pada titik tertentu, seperti banyak kemungkinan jalur kontrol, algoritma berhenti.

Untuk setiap jalur alur kontrol, pernyataan pertama (jika ada) yang mengembalikan tataan hasil ditentukan oleh sp_describe_first_result_set.

Ketika beberapa kemungkinan pernyataan pertama ditemukan dalam batch, hasilnya dapat berbeda dalam jumlah kolom, nama kolom, nullability, dan jenis data. Bagaimana perbedaan ini ditangani dijelaskan secara lebih rinci di sini:

  • Jika jumlah kolom berbeda, kesalahan akan ditampilkan dan tidak ada hasil yang dikembalikan.

  • Jika nama kolom berbeda, nama kolom yang dikembalikan diatur ke NULL.

  • Jika nullability berbeda, nullability yang dikembalikan memungkinkan NULL.

  • Jika jenis data berbeda, kesalahan akan ditampilkan dan tidak ada hasil yang dikembalikan kecuali untuk kasus berikut:

    • varchar(a) ke varchar(a') di mana a' > a.
    • varchar(a) ke varchar(max)
    • nvarchar(a) ke nvarchar(a') di mana a' > a.
    • nvarchar(a) ke nvarchar(max)
    • varbinary(a) ke varbinary(a') di mana a' > a.
    • varbinary(a) ke varbinary(max)

sp_describe_first_result_set tidak mendukung rekursi tidak langsung.

Izin

Memerlukan izin untuk menjalankan argumen @tsql .

Contoh

Contoh umum

J. Contoh dasar

Contoh berikut menjelaskan kumpulan hasil yang dikembalikan dari satu kueri.

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

Contoh berikut menunjukkan kumpulan hasil yang dikembalikan dari satu kueri yang berisi parameter.

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. Telusuri contoh mode

Tiga contoh berikut mengilustrasikan perbedaan utama antara mode informasi penelusuran yang berbeda. Hanya kolom yang relevan yang disertakan dalam hasil kueri.

Contoh menggunakan 0, menunjukkan tidak ada informasi yang dikembalikan.

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;

Berikut adalah hasil parsial yang ditetapkan.

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

Contoh menggunakan 1 yang menunjukkan menampilkan informasi seolah-olah menyertakan opsi UNTUK TELUSURI pada kueri.

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

Berikut adalah hasil parsial yang ditetapkan.

is_hidden column_ordinal nama 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

Contoh menggunakan 2 yang menunjukkan dianalisis seolah-olah Anda menyiapkan kursor.

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

Berikut adalah hasil yang ditetapkan.

is_hidden column_ordinal nama 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. Menyimpan hasil dalam tabel

Dalam beberapa skenario, Anda perlu meletakkan hasil sp_describe_first_result_set prosedur dalam tabel sehingga Anda dapat memproses skema lebih lanjut.

Pertama, Anda perlu membuat tabel yang cocok dengan output sp_describe_first_result_set prosedur:

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

Saat membuat tabel, Anda bisa menyimpan skema beberapa kueri dalam tabel tersebut.

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

INSERT INTO #frs
EXEC sys.sp_describe_first_result_set @tsql;

SELECT * FROM #frs;

Contoh masalah

Contoh berikut menggunakan dua tabel untuk semua contoh. Jalankan pernyataan berikut untuk membuat tabel contoh.

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

Kesalahan karena jumlah kolom berbeda

Jumlah kolom dalam kemungkinan kumpulan hasil pertama berbeda dalam contoh ini.

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

Kesalahan karena tipe data berbeda

Jenis kolom berbeda dalam kemungkinan set hasil pertama yang berbeda.

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

Ini menghasilkan kesalahan jenis yang tidak cocok (int vs. smallint).

Nama kolom tidak dapat ditentukan

Kolom dalam kumpulan hasil pertama yang mungkin berbeda menurut panjang untuk jenis panjang variabel, nullability, dan nama kolom yang sama:

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

Berikut adalah hasil parsial yang ditetapkan.

Kolom Nilai
name Nama kolom tidak diketahui
system_type_name varchar
max_length 20
is_nullable 1

Nama kolom yang dipaksa identik melalui aliasing

Sama seperti sebelumnya, tetapi kolom memiliki nama yang sama melalui alias kolom.

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

Berikut adalah hasil parsial yang ditetapkan.

Kolom Nilai
name b
system_type_name varchar
max_length 20
is_nullable 1

Kesalahan karena tipe kolom tidak dapat dicocokkan

Jenis kolom berbeda dalam berbagai kemungkinan tataan hasil pertama.

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

Ini menghasilkan kesalahan jenis yang tidak cocok (varchar(10) vs. nvarchar(10)).

Kumpulan hasil dapat mengembalikan kesalahan

Kumpulan hasil pertama adalah kesalahan atau tataan hasil.

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

Berikut adalah hasil parsial yang ditetapkan.

Kolom Nilai
name a
system_type_name int
is_nullable 1

Beberapa jalur kode tidak mengembalikan hasil

Tataan hasil pertama adalah null atau tataan hasil.

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

Berikut adalah hasil parsial yang ditetapkan.

Kolom Nilai
name a
system_type_name int
is_nullable 1

Hasil dari SQL dinamis

Tataan hasil pertama adalah SQL dinamis yang dapat ditemukan karena merupakan string harfiah.

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

Berikut adalah hasil parsial yang ditetapkan.

Kolom Nilai
name a
system_type_name int
is_nullable 1

Kegagalan hasil dari SQL dinamis

Kumpulan hasil pertama tidak ditentukan karena SQL dinamis.

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

Ini menghasilkan kesalahan. Hasilnya tidak dapat ditemukan karena SQL dinamis.

Tataan hasil yang ditentukan oleh pengguna

Kumpulan hasil pertama ditentukan secara manual oleh pengguna.

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

Berikut adalah hasil parsial yang ditetapkan.

Kolom Nilai
name Column1
system_type_name bigint
is_nullable 0

Kesalahan yang disebabkan oleh tataan hasil ambigu

Contoh ini mengasumsikan bahwa pengguna lain bernama user1 memiliki tabel bernama t1 dalam skema s1 default dengan kolom (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';

Kode ini menghasilkan kesalahan Invalid object name . t1 dapat berupa dbo.t1 atau s1.t1, masing-masing dengan jumlah kolom yang berbeda.

Hasil bahkan dengan tataan hasil ambigu

Gunakan asumsi yang sama dengan contoh sebelumnya.

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

Berikut adalah hasil parsial yang ditetapkan.

Kolom Nilai
name a
system_type_name int
is_nullable 1

Baik dbo.t1.a dan s1.t1.a memiliki int jenis, dan nullability yang berbeda.