22. říjen 2007
Hledáme text v Triggeru nebo Stored Proceduře
Pokud nechcete hledat pouze text v názvu triggeru nebo stored procedury, pak použití Object Search analyzeru není to co by vám dokázalo pomoci. Navíc v MS SQL 2005 Object Search analyzer prostě není. Proto je potřeba použít jiný způsob.
Zde je kód pro hledání v xtype objects, který obsahuje tělo triggeru, stored procedury případně dalších objektů uvnitř MS SQL databáze. Tento konkrétní příklad ukazuje jak hledat v triggerech a stored procedurách.
DECLARE @SEARCHSTRING VARCHAR(255), @notcontain Varchar(255)
SELECT @SEARCHSTRING = 'Text I am searching', @notcontain = ''
SELECT DISTINCT sysobjects.name AS [Object Name] ,
case when sysobjects.xtype = 'P' then 'Stored Proc'
when sysobjects.xtype = 'TF' then 'Function'
when sysobjects.xtype = 'TR' then 'Trigger'
end as [Object Type]
FROM sysobjects,syscomments
WHERE sysobjects.id = syscomments.id
AND sysobjects.type in ('P','TF','TR')
AND sysobjects.category = 0
AND CHARINDEX(@SEARCHSTRING,syscomments.text)>0
AND ((CHARINDEX(@notcontain,syscomments.text)=0
or CHARINDEX(@notcontain,syscomments.text)<>0))
Do @SEARCHSTRING proměnné můžete přiřadit libovolný text který potřebujete nalézt. Pokud potřebujete přidat podmínku, že určitý text obsahovat nemá, stačí naplnit proměnnou @notcontain.
Pro hledání můžete použít i jiné objekty MS SQL databáze. V takovém případě je třeba změnit podmínku CASE a přidat další xtypes typy, v kterých chcete hledat. Dále musíte změnit WHERE podmínku a sysobjects.type podle zvolených xtypes. Seznam použitelných objektů sysobjects.type a sysobjects.xtype je uveden níže a je velmi podobný. Je zde pouze jeden rozdíl a to type K (primární klíč nebo UNIQUE contraint) je v xtype rozdělený do PK (primární klíč) a UQ (UNIQUE constraint)
Seznam sysobjects.type objektů
C = CHECK constraint
D = Default or DEFAULT constraint
F = FOREIGN KEY constraint
K = PRIMARY KEY or UNIQUE constraint
L = Log
P = Stored procedure
R = Rule
RF = Replication filter stored procedure
S = System table
TR = Trigger
U = User table
V = View
X = Extended stored procedure
Seznam sysobjects.xtypes objektů
C = CHECK constraint
D = Default or DEFAULT constraint
F = FOREIGN KEY constraint
L = Log
P = Stored procedure
PK = PRIMARY KEY constraint (type is K)
RF = Replication filter stored procedure
S = System table
TR = Trigger
U = User table
UQ = UNIQUE constraint (type is K)
V = View
X = Extended stored procedure