sp_describe_first_result_set (T-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)Titik akhir analitik SQL di Microsoft FabricWarehouse 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 (Transact-SQL) mengembalikan informasi yang sama.

Konvensi sintaks transact-SQL

Sintaks

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

Argumen

[ @tsql = ] 'Transact-SQL_batch' Satu atau beberapa pernyataan Transact-SQL. Transact-SQL_batch mungkin nvarchar(n) atau nvarchar(max).

[ @params = ] N'parameters' @params menyediakan string deklarasi untuk parameter untuk batch Transact-SQL, yang mirip dengan sp_executesql. Parameter mungkin nvarchar(n) atau nvarchar(maks).

Adalah satu string yang berisi definisi semua parameter yang telah disematkan dalam Transact-SQL_batch. 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 menyertakan opsi UNTUK TELUSURI pada kueri. Kolom kunci tambahan dan informasi tabel sumber dikembalikan.

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

  • Jika diatur ke 1, setiap kueri dianalisis seolah-olah menyertakan opsi UNTUK TELUSURI pada kueri. Ini akan 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 akan 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 error_type sys.dm_exec_describe_first_result_set. 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 dikembalikan.

Nama kolom Jenis data Deskripsi
is_hidden bit NOT NULL Menunjukkan bahwa kolom adalah kolom tambahan yang ditambahkan untuk tujuan informasi penjelajahan dan bahwa kolom tersebut tidak benar-benar muncul dalam tataan hasil.
column_ordinal int NOT NULL Berisi posisi ordinal kolom dalam tataan hasil. Posisi kolom pertama akan ditentukan sebagai 1.
nama sysname NULL Berisi nama kolom jika nama dapat ditentukan. Jika tidak, itu akan berisi NULL.
is_nullable bit NOT NULL Berisi nilai 1 jika kolom mengizinkan NULL, 0 jika kolom tidak mengizinkan NULL, dan 1 jika tidak dapat ditentukan jika kolom mengizinkan NULL.
system_type_id int NOT NULL Berisi system_type_id tipe data kolom seperti yang ditentukan dalam sys.type. Untuk jenis CLR, meskipun kolom system_type_name akan mengembalikan NULL, kolom ini akan mengembalikan nilai 240.
system_type_name nvarchar(256) NULL 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.
max_length smallint NOT NULL Panjang maksimum (dalam byte) kolom.

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

Untuk kolom teks , nilai max_length akan menjadi 16 atau nilai yang ditetapkan oleh sp_tableoption 'teks dalam baris'.
Presisi tinyint NOT NULL Presisi kolom jika berbasis numerik. Jika tidak, mengembalikan 0.
Skala tinyint NOT NULL Skala kolom jika berbasis numerik. Jika tidak, mengembalikan 0.
collation_name sysname NULL Nama kolater kolom jika berbasis karakter. Jika tidak, mengembalikan NULL.
user_type_id int NULL Untuk jenis CLR dan alias, berisi user_type_id tipe data kolom seperti yang ditentukan dalam sys.type. Jika tidak, null.
user_type_database sysname NULL Untuk jenis CLR dan alias, berisi nama database tempat jenis ditentukan. Jika tidak, null.
user_type_schema sysname NULL Untuk jenis CLR dan alias, berisi nama skema di mana jenis ditentukan. Jika tidak, null.
user_type_name sysname NULL Untuk jenis CLR dan alias, berisi nama jenis . Jika tidak, null.
assembly_qualified_type_name nvarchar(4000) Untuk jenis CLR, mengembalikan nama rakitan dan kelas yang menentukan jenisnya. Jika tidak, null.
xml_collection_id int NULL Berisi xml_collection_id tipe data kolom seperti yang ditentukan dalam sys.columns. Kolom ini akan mengembalikan NULL jika jenis yang dikembalikan tidak terkait dengan kumpulan skema XML.
xml_collection_database sysname NULL Berisi database tempat kumpulan skema XML yang terkait dengan jenis ini ditentukan. Kolom ini akan mengembalikan NULL jika jenis yang dikembalikan tidak terkait dengan kumpulan skema XML.
xml_collection_schema sysname NULL Berisi skema di mana kumpulan skema XML yang terkait dengan jenis ini ditentukan. Kolom ini akan mengembalikan NULL jika jenis yang dikembalikan tidak terkait dengan kumpulan skema XML.
xml_collection_name sysname NULL Berisi nama kumpulan skema XML yang terkait dengan tipe ini. Kolom ini akan mengembalikan NULL jika jenis yang dikembalikan tidak terkait dengan kumpulan skema XML.
is_xml_document bit NOT NULL 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.
is_case_sensitive bit NOT NULL Mengembalikan 1 jika kolom adalah jenis string peka huruf besar/kecil dan 0 jika tidak.
is_fixed_length_clr_type bit NOT NULL Mengembalikan 1 jika kolom adalah jenis CLR dengan panjang tetap dan 0 jika tidak.
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. Hanya diisi jika informasi penjelajahan diminta.
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.
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.
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.
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.
is_identity_column bit NULL Mengembalikan 1 jika kolom adalah kolom identitas dan 0 jika tidak. Mengembalikan NULL jika tidak dapat ditentukan bahwa kolom adalah kolom identitas.
is_part_of_unique_key bit NULL 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.
is_updateable bit NULL Mengembalikan 1 jika kolom dapat diperbarui dan 0 jika tidak. Mengembalikan NULL jika tidak dapat ditentukan bahwa kolom dapat diperbarui.
is_computed_column bit NULL Mengembalikan 1 jika kolom adalah kolom komputasi dan 0 jika tidak. Mengembalikan NULL jika tidak dapat ditentukan bahwa kolom adalah kolom komputasi.
is_sparse_column_set bit NULL 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.
ordinal_in_order_by_list smallint NULL Posisi kolom ini dalam daftar ORDER BY. Mengembalikan NULL jika kolom tidak muncul dalam daftar ORDER BY atau jika daftar ORDER BY tidak dapat ditentukan secara unik.
order_by_list_length smallint NULL Panjang daftar ORDER BY. Mengembalikan NULL jika tidak ada daftar ORDER BY atau jika daftar ORDER BY tidak dapat ditentukan secara unik. Perhatikan bahwa nilai ini akan sama untuk semua baris yang dikembalikan oleh sp_describe_first_result_set.
order_by_is_descending smallint NULL Jika ordinal_in_order_by_list bukan NULL, kolom order_by_is_descending melaporkan arah klausa ORDER BY untuk kolom ini. Jika tidak, ia melaporkan NULL.
tds_type_id int NOT NULL Untuk penggunaan internal.
tds_length int NOT NULL Untuk penggunaan internal.
tds_collation_id int NULL Untuk penggunaan internal.
tds_collation_sort_id tinyint NULL Untuk penggunaan internal.

Keterangan

sp_describe_first_result_set menjamin bahwa jika prosedur mengembalikan metadata tataan hasil pertama untuk batch A (hipotetis) dan jika batch tersebut (A) kemudian dijalankan maka batch akan meningkatkan kesalahan waktu pengoptimalan, (2) menimbulkan kesalahan run-time, (3) tidak mengembalikan tataan hasil, atau (4) 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 akan 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.

  • Jika 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.

  • Jika @params bukan 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.

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

  • Jika 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 pernyataan EXEC, pernyataan DDL yang menyebabkan pemicu DDL ditembakkan, atau pernyataan DML yang menyebabkan pemicu ditembakkan pada tabel target atau pada tabel yang dimodifikasi karena tindakan bertingkat pada kunci asing Kendala. Dalam kasus banyak kemungkinan jalur kontrol, pada titik tertentu 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.

  • Nullability berbeda, nullability yang dikembalikan akan memungkinkan NULL.

  • Jika jenis data berbeda, kesalahan akan dilemparkan 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 sederhana

Contoh berikut menjelaskan kumpulan hasil yang dikembalikan dari satu kueri.

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.

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 telah disertakan dalam hasil kueri.

Contoh menggunakan 0 yang 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 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 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 harus meletakkan hasil sp_describe_first_result_set prosedur dalam beberapa 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 #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.

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.

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

Hasil: 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:

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

Hasil: <Nama>Kolom Tidak Diketahui varchar(20) NULL

Nama kolom yang dipaksa identik melalui aliasing

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

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

Hasil: b varchar(20)NULL

Kesalahan karena tipe kolom tidak dapat dicocokkan

Jenis kolom berbeda dalam berbagai kemungkinan tataan hasil pertama.

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

Hasil: Kesalahan, jenis yang tidak cocok (varchar(10) vs. nvarchar(10)).

Kumpulan hasil dapat mengembalikan kesalahan

Kumpulan hasil pertama adalah kesalahan atau tataan hasil.

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

Hasil: intNULL

Beberapa jalur kode tidak mengembalikan hasil

Tataan hasil pertama adalah null atau tataan hasil.

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

Hasil: intNULL

Hasil dari SQL dinamis

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

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

Hasil: INT NULL

Kegagalan hasil dari SQL dinamis

Kumpulan hasil pertama tidak ditentukan karena SQL dinamis.

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

Hasil: Kesalahan. Hasil tidak dapat ditemukan karena SQL dinamis.

Tataan hasil yang ditentukan oleh pengguna

Kumpulan hasil pertama ditentukan secara manual oleh pengguna.

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

Hasil: Kolom1 bigint NOT NULL

Kesalahan yang disebabkan oleh tataan hasil ambigu

Contoh ini mengasumsikan bahwa pengguna lain bernama user1 memiliki tabel bernama t1 dalam skema default s1 dengan kolom (int NOT NULL).

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

Hasil: Kesalahan. 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.

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

Hasil: int NULL karena dbo.t1.a dan s1.t1.a memiliki int jenis dan nullability yang berbeda.

Lihat Juga

sp_describe_undeclared_parameters (T-SQL)
sys.dm_exec_describe_first_result_set (T-SQL)
sys.dm_exec_describe_first_result_set_for_object (T-SQL)