Dipecahkan: temukan kolom di semua prosedur tersimpan server sql

Pembaharuan Terakhir: 09/13/2023

Saat bekerja dengan database besar di SQL Server, Anda mungkin menghadapi situasi di mana Anda perlu menemukan kolom tertentu di semua prosedur tersimpan. Ini bisa muncul jika Anda memfaktorkan ulang kode Anda, mencari bug, atau sekadar ingin tahu tentang penggunaan kolom dalam prosedur Anda. Apapun alasannya, mencari kolom di SQL Server mungkin terlihat seperti tugas yang sulit, namun jangan khawatir—dengan skrip SQL yang tepat, hal ini dapat dilakukan dengan cepat dan mudah.

Kita dapat mencapainya dengan menggunakan tabel `INFORMATION_SCHEMA.ROUTINES` atau `sys.sql_modules`, tempat teks setiap prosedur disimpan di server SQL.

[b] Mari kita lihat secara praktis bagaimana menemukan kolom di semua prosedur tersimpan di SQL Server. [/B]

Ikhtisar Solusi

Strategi dasar kami adalah menanyakan tabel `INFORMATION_SCHEMA.ROUTINES` (atau `sys.sql_modules`) untuk mengambil definisi setiap prosedur tersimpan. Kita kemudian dapat menggunakan pernyataan `LIKE` untuk mencari kolom kita dalam definisi ini. Sesederhana itu!

Jika Anda ingin mencapai hal ini di lingkungan SQL Server Anda sendiri, Anda dapat menggunakan kueri umum ini:

SELECT 
    ROUTINE_NAME, ROUTINE_DEFINITION
FROM 
    INFORMATION_SCHEMA.ROUTINES 
WHERE 
    ROUTINE_DEFINITION LIKE '%ColumnName%'
    AND ROUTINE_TYPE='PROCEDURE'

Penjelasan Kode Langkah-demi-Langkah

1. Memilih Informasi yang Diperlukan

Kita mulai dengan memilih `ROUTINE_NAME` dan `ROUTINE_DEFINITION` dari `INFORMATION_SCHEMA.ROUTINES`.

2. Menyaring Definisi

Kemudian, kita menggunakan klausa `WHERE` untuk memfilter `ROUTINE_DEFINITION`. Kami hanya tertarik pada baris yang `ROUTINE_DEFINITION`nya berisi nama kolom kami.

3. Membatasi Prosedur Tersimpan

Terakhir, kita menambahkan kondisi lain di klausa `WHERE` untuk membatasi kumpulan hasil kita hanya pada rutinitas yang merupakan prosedur tersimpan.

Pendekatan Alternatif menggunakan sys.sql_modules

Kueri di atas akan berfungsi dengan baik untuk menemukan nama kolom dalam prosedur tersimpan. Namun, ada cara alternatif untuk mendapatkan informasi yang sama. Kita dapat menggunakan tampilan sistem `sys.sql_modules` untuk mendapatkan teks modul SQL Server. Ini mencakup definisi prosedur tersimpan, fungsi, pemicu, dll.

SELECT Object_name(sm.object_id) as name, sm.definition
FROM sys.sql_modules AS sm
JOIN sys.objects AS o ON sm.object_id = o.object_id
WHERE sm.definition like '%ColumnName%'
AND type_desc = 'SQL_STORED_PROCEDURE'

Memanfaatkan Wildcard SQL

Wildcard SQL bisa sangat berguna di sini. Jika Anda tidak yakin apakah spasi atau karakter lain mungkin mendahului atau mengikuti nama kolom, Anda dapat menggunakan karakter pengganti `%` seperti `'% Nama Kolom %'` untuk mencakup karakter apa pun yang mungkin ada.

Dengan langkah-langkah mudah ini, kini Anda dapat dengan mudah menemukan kolom di seluruh prosedur tersimpan Anda di server SQL. Kegunaan fitur tersebut tidak terbatas pada menemukan kolom, namun meluas ke teks apa pun yang ingin Anda temukan di seluruh prosedur tersimpan Anda.

Pos terkait: