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.
Sintaks
sp_describe_first_result_set [ @tsql = ] N'tsql'
[ , [ @params = ] N'@parameter_name data_type [ , ... n ]' ]
[ , [ @browse_information_mode = ] <tinyint> ]
[ ; ]
Argumen
[ @tsql = ] 'tsql'
Satu atau beberapa pernyataan Transact-SQL. @tsql mungkin nvarchar(n) atau nvarchar(max).
[ @params = ] N'@parameter_name data_type [ , ... n ]'
@params menyediakan string deklarasi untuk parameter untuk batch Transact-SQL, yang mirip sp_executesql
dengan . 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-olahFOR 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_set
error_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
, , WHILE
dan blok Transact-SQL/TRY
CATCH
) 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 set hasilnya.
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.