“Find Usage” in SQL

10. Juni 2015

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.dependencies

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.