sys.fn_get_sql (T-SQL)
Berlaku untuk: SQL Server
Mengembalikan teks pernyataan SQL untuk handel SQL yang ditentukan.
Penting
Fitur ini akan dihapus dalam versi Microsoft SQL Server di masa mendatang. Hindari menggunakan fitur ini dalam pekerjaan pengembangan baru, dan rencanakan untuk memodifikasi aplikasi yang saat ini menggunakan fitur ini. Gunakan sys.dm_exec_sql_text sebagai gantinya. Untuk informasi selengkapnya, lihat sys.dm_exec_sql_text (Transact-SQL).
Sintaks
sys.fn_get_sql ( SqlHandle )
Argumen
SqlHandle
Adalah nilai handel. SqlHandle adalah varbinary(64) tanpa default.
Tabel yang Dikembalikan
Nama kolom | Jenis data | Deskripsi |
---|---|---|
dbid | smallint | ID Database. Untuk pernyataan ad hoc dan SQL yang disiapkan, ID database tempat pernyataan dikompilasi. |
objectId | int | ID objek database. Adalah NULL untuk pernyataan SQL ad hoc. |
number | smallint | Menunjukkan jumlah grup, jika prosedur dikelompokkan. 0 = Entri bukan prosedur. NULL = Pernyataan Ad hoc SQL. |
dienkripsi | bit | Menunjukkan apakah objek dienkripsi. 0 = Tidak dienkripsi 1 = Terenkripsi |
text | text | Adalah teks pernyataan SQL. Adalah NULL untuk objek terenkripsi. |
Keterangan
Anda dapat memperoleh handel SQL yang valid dari kolom sql_handle tampilan manajemen dinamis sys.dm_exec_requests (Transact-SQL ).
Jika Anda meneruskan handel yang tidak lagi ada di cache, fn_get_sql mengembalikan tataan hasil kosong. Jika Anda meneruskan handel yang tidak valid, batch akan berhenti, dan pesan kesalahan dikembalikan.
Mesin Database SQL Server tidak dapat menyimpan beberapa pernyataan Transact-SQL, seperti pernyataan dan pernyataan salinan massal dengan literal string yang lebih besar dari 8 KB. Handel ke pernyataan tersebut tidak dapat diambil dengan menggunakan fn_get_sql.
Kolom teks dari tataan hasil difilter untuk teks yang mungkin berisi kata sandi. Untuk informasi selengkapnya tentang prosedur tersimpan terkait keamanan yang tidak dipantau, lihat Memfilter Jejak.
Fungsi fn_get_sql mengembalikan informasi yang mirip dengan perintah DBCC INPUTBUFFER . Berikut ini adalah contoh kapan fungsi fn_get_sql dapat digunakan karena DBCC INPUTBUFFER tidak dapat:
Ketika peristiwa memiliki lebih dari 255 karakter.
Ketika Anda harus mengembalikan tingkat bersarang tertinggi saat ini dari prosedur tersimpan. Misalnya, ada dua prosedur tersimpan yang diberi nama sp_1 dan sp_2. Jika sp_1 memanggil sp_2 dan Anda mendapatkan handel dari tampilan manajemen dinamis sys.dm_exec_requests saat sp_2 berjalan, fungsi fn_get_sql mengembalikan informasi tentang sp_2. Selain itu, fungsi fn_get_sql mengembalikan teks lengkap prosedur tersimpan pada tingkat berlapis tertinggi saat ini.
Izin
Pengguna memerlukan izin TAMPILKAN STATUS SERVER di server.
Contoh
Administrator database dapat menggunakan fungsi fn_get_sql, seperti yang diperlihatkan dalam contoh berikut, untuk membantu mendiagnosis proses masalah. Setelah administrator mengidentifikasi ID sesi masalah, administrator dapat mengambil handel SQL untuk sesi tersebut, memanggil fn_get_sql dengan handel, lalu menggunakan offset awal dan akhir untuk menentukan teks SQL dari ID sesi masalah.
DECLARE @Handle varbinary(64);
SELECT @Handle = sql_handle
FROM sys.dm_exec_requests
WHERE session_id = 52 and request_id = 0;
SELECT * FROM sys.fn_get_sql(@Handle);
GO
Lihat Juga
DBCC INPUTBUFFER (Transact-SQL)
sys.sysprocesses (Transact-SQL)
sys.dm_exec_requests (Transact-SQL)