Di SQL Server, ada beberapa cara untuk mendapatkan metadata dari kumpulan hasil dari kueri. Ini termasuk tipe data kolom yang dikembalikan oleh kueri T-SQL.
Khususnya, sys.dm_exec_describe_first_result_set
fungsi manajemen dinamis sistem adalah pilihan yang baik untuk tugas seperti itu.
Contoh
Berikut adalah contoh untuk mendemonstrasikan cara menggunakan sys.dm_exec_describe_first_result_set
untuk mendapatkan informasi tipe data tentang setiap kolom yang dikembalikan oleh kueri T-SQL yang diberikan.
SELECT
name,
user_type_name,
system_type_name,
max_length,
[precision],
scale
FROM sys.dm_exec_describe_first_result_set(
'select * from Clients',
null,
0);
Hasil:
+------------+------------------+--------------------+--------------+-------------+---------+ | name | user_type_name | system_type_name | max_length | precision | scale | |------------+------------------+--------------------+--------------+-------------+---------| | ClientCode | clientcode | varchar(8) | 8 | 0 | 0 | | FirstName | NULL | varchar(60) | 60 | 0 | 0 | | LastName | NULL | varchar(60) | 60 | 0 | 0 | +------------+------------------+--------------------+--------------+-------------+---------+
Dalam hal ini, tiga baris dikembalikan, masing-masing mewakili kolom yang akan dikembalikan oleh kueri yang saya analisis.
Anda mungkin telah memperhatikan bahwa salah satu kolom menggunakan alias tipe data yang ditentukan pengguna yang disebut kode klien . Saat Anda membuat alias tipe data yang ditentukan pengguna, Anda mendasarkannya pada tipe sistem yang ada. Hal ini tercermin dalam hasil di atas. Kita dapat melihat kode klien . itu didasarkan pada varchar(8) .
sys.dm_exec_describe_first_result_set
function mengembalikan banyak kolom, jadi jangan ragu untuk menyertakan semua kolom untuk melihat apakah ada kolom lain yang mungkin berguna bagi Anda. Lihat juga Bagaimana sys.dm_exec_describe_first_result_set
Berfungsi untuk penjelasan yang lebih mendetail dan lebih banyak contoh.
Anda juga dapat menggunakan sp_describe_first_result_set
prosedur tersimpan sistem untuk mengembalikan informasi yang sama (menggunakan algoritma yang sama dengan sys.dm_exec_describe_first_result_set
).
Set Hasil Prosedur Tersimpan
Jika Anda ingin mendapatkan tipe data kolom yang dikembalikan oleh prosedur tersimpan, Anda dapat menggunakan sys.dm_exec_describe_first_result_set_for_object
fungsi.
Fungsi ini menggunakan algoritme yang sama seperti yang sebelumnya, tetapi perbedaannya adalah fungsi ini menerima ID dari prosedur tersimpan atau pemicu sebagai argumen pertamanya (bukan kumpulan T-SQL yang sebenarnya).
Oleh karena itu, kita dapat menggunakannya seperti ini:
SELECT
name,
user_type_name,
system_type_name,
max_length,
[precision],
scale
FROM sys.dm_exec_describe_first_result_set_for_object(
OBJECT_ID('sp_BadDogs'),
0);
Hasil:
+---------+------------------+--------------------+--------------+-------------+---------+ | name | user_type_name | system_type_name | max_length | precision | scale | |---------+------------------+--------------------+--------------+-------------+---------| | DogId | NULL | int | 4 | 10 | 0 | | DogName | NULL | nvarchar(255) | 510 | 0 | 0 | | GoodDog | NULL | bit | 1 | 1 | 0 | +---------+------------------+--------------------+--------------+-------------+---------+
Dalam hal ini, saya menggunakan OBJECT_ID()
berfungsi untuk mengembalikan ID prosedur tersimpan, yang menyelamatkan saya dari keharusan mengetahui ID yang sebenarnya.
Lihat Cara Kerja sys.dm_exec_describe_first_result_set_for_object untuk informasi lebih lanjut dan contoh fungsi ini.