Manā gadījumā bija nepieciešams atrast, kur datu bāzes objektos ir izmantota konkrēta frāze.
sys.objects- var izmantot lai iegūtu datu bāzes objektus (izņemot DML trigerus), to izveides un mainīšanas datumus un citu informāciju. Tātad- ja vēlaties uzzināt kuri objekti mainīti pēdējā mēneša laikā, šis ir īstais skats, kurā meklēt attiecīgo informāciju!
sys.sql_modules- var izmantot, lai iegūtu procedūru, skatu, triger, ... izveides skriptus (gadījumā, ja objekts ir izveidots šifrēts, tad "definition" būs vērtība Null).
Tas, kā šos skatus izmantoju:
select o.name, definitionBet ja būtu vajadzīgs iegūt izveides skriptu, rīkotos apmēram šādi:
from sys.sql_modules c
join sys.objects o
on c.object_id = o.object_id
where definition like '%MeklējamāFrāze%'
declare @txt nvarchar(max)Iepriekšējo var ielikt iekš kursora, pielikt vēl "Go" pa vidu un noskriptēt vajadzīgos objektus:
select @txt = definition
from sys.sql_modules c
join sys.objects o
on c.object_id = o.object_id
where name = 'ObjektaNosaukums'
Print @txt
declare @txt nvarchar(max)Print komanda izvada tekstu, kas nav garāks par 4000 simboliem (ja nvarchar, kā šajā gadījumā). Tātad- ja procedūras teksts būs garāks, tad tā tiks izvadīta tikai daļēji- Print komandas teksta garuma ierobežojums.
declare cur cursor for
select definition
from sys.sql_modules c join sys.objects o
on c.object_id = o.object_id
where definition like '%Frāze%'
open cur
fetch next from cur into @txt
while @@fetch_status = 0
Begin
print @txt
print 'Go'
print ''
fetch next from cur into @txt
End
close cur
deallocate cur
Un uzreiz neliela piepilde- var izmantot arī funkciju sp_helptext! Bet rakstā aprakstītais patīk labāk :).
AtbildētDzēstPaldies, par rakstu. Es parasti taisu datu bāzes pilno skriptu un tad vajadzīgo meklēju tajā. Šādi ir viennozīmīgi elegantāk un ērtāk.
AtbildētDzēst