Atrisināts: atrodiet kolonnu visās saglabātajās procedūrās sql server

Pēdējā atjaunošana: 09/13/2023

Strādājot ar lielām datu bāzēm SQL Server, jūs neizbēgami varat saskarties ar situāciju, kad jums ir jāatrod konkrēta kolonna visās saglabātajās procedūrās. Tas var rasties, ja pārveidojat savu kodu, meklējat kļūdas vai vienkārši interesējaties par kolonnas izmantošanu savās procedūrās. Neatkarīgi no iemesla kolonnas atrašana SQL Server var šķist biedējošs uzdevums, taču neuztraucieties — ar pareizo SQL skriptu to var padarīt ātri un vienkārši.

Mēs to varam panākt, izmantojot tabulu `INFORMATION_SCHEMA.ROUTINES` vai `sys.sql_modules`, kur katras procedūras teksts tiek glabāts SQL serverī.

[b] Apskatīsim praktisku skatījumu uz to, kā atrast kolonnu visās SQL Server saglabātajās procedūrās. [/b]

Risinājuma pārskats

Mūsu pamata stratēģija būs vaicājums tabulā INFORMATION_SCHEMA.ROUTINES (vai 'sys.sql_modules'), lai izgūtu katras saglabātās procedūras definīciju. Pēc tam mēs varam izmantot paziņojumu LIKE, lai meklētu mūsu kolonnu šajās definīcijās. Tas ir tik vienkārši!

Ja vēlaties to paveikt savā SQL Server vidē, varat izmantot šo vispārīgo vaicājumu:

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

Soli pa solim koda skaidrojums

1. Nepieciešamās informācijas atlasīšana

Mēs sākam, atlasot ROUTINE_NAME un ROUTINE_DEFINITION no INFORMATION_SCHEMA.ROUTINES.

2. Definīcijas filtrēšana

Pēc tam mēs izmantojam klauzulu WHERE, lai filtrētu ROUTINE_DEFINITION. Mūs interesē tikai tās rindas, kurās ROUTINE_DEFINITION ir mūsu kolonnas nosaukums.

3. Ierobežojumi ar saglabātajām procedūrām

Visbeidzot, mēs pievienojam vēl vienu nosacījumu klauzulā WHERE, lai ierobežotu mūsu rezultātu kopu tikai tām rutīnām, kas ir saglabātas procedūras.

Alternatīva pieeja, izmantojot sys.sql_modules

Iepriekš minētais vaicājums lieliski darbosies, lai saglabātajā procedūrā atrastu kolonnas nosaukumu. Tomēr ir alternatīvs veids, kā iegūt to pašu informāciju. Mēs varam izmantot `sys.sql_modules` sistēmas skatu, lai iegūtu SQL Server moduļu tekstu. Tas ietver saglabāto procedūru, funkciju, trigeru u.c. definīcijas.

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'

SQL aizstājējzīmju izmantošana

SQL aizstājējzīmes šeit var būt ļoti noderīgas. Ja neesat pārliecināts, vai pirms kolonnas nosaukuma var būt atstarpes vai citas rakstzīmes, varat izmantot aizstājējzīmi `%`, piemēram, `'% ColumnName %'`, lai ietvertu visas iespējamās rakstzīmes.

Veicot šīs vienkāršās darbības, tagad varat viegli atrast kolonnu visās SQL serverī saglabātajās procedūrās. Šādas funkcijas lietderība neaprobežojas tikai ar kolonnu atrašanu, bet attiecas uz jebkuru tekstu, kuru vēlaties pamanīt savās saglabātajās procedūrās.

Related posts: