Bagikan melalui


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

Konvensi sintaks 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)