Beim Reverse Engineering von Code gibt es mittlerweile viele hilfreiche Tools für den Entwickler. Visual Studio bietet beispielsweise Möglichkeiten wie “Find All References” sogar innerhalb von Database Projekten in SQL an. Mitunter liegen die Sourcen aber weder in Visual Studio noch als Dateien vor.
“View Dependencies” im SQL Management Studio hilft oft schon weiter, stößt aber bei detaillierteren Suchen schnell an seine Grenzen.
Aber anstatt den Code nun aus dem SQL Server zu exportieren, kann man OBJECT_DEFINITION verwenden und ihn mit WHERE-Statements durchsuchen:
1: SELECT
2: Name
3: FROM
4: (
5: SELECT
6: S.Name + '.' + F.NAME as [Name],
7: OBJECT_DEFINITION(object_id) as [sql]
8: FROM sys.objects as F
9: INNER JOIN sys.schemas as S
10: ON F.schema_id = s.schema_id
11: WHERE F.type IN
12: (
13: 'TF'-- SQL_TABLE_VALUED_FUNCTION
14: ,'FN'-- SQL_SCALAR_FUNCTION
15: ,'IF'-- SQL_INLINE_TABLE_VALUED_FUNCTION
16:
17: ,'P '-- SQL_STORED_PROCEDURE
18: )
19: ) AS T
20: WHERE [sql] LIKE '%xyz%'
21: ORDER BY Name
Suchen wie
- Wo wurde die Spalte xyz verwendet?
- Wo wurde der String ‘XYZ’ gesetzt?
- Wo hatte ich das TODO hinterlassen?
- …
lassen sich so auch in Projekten ohne SQL Sourcen sehr schnell durchführen.