SQL筆記:透過關鍵字完整搜尋資料庫的物件名稱與指令內容

面對一個龐大的資料庫內部蘊藏的資料可以說是茫茫大海,在許多未知資料庫全貌的時刻想要在資料庫裏面理解想要的資訊放在哪裡,簡直是比登天還難。以下是我常用到的兩種資料庫內文搜尋的指令,放置在此供給有需要的人參考。

物件名稱搜尋

盡管SSMS介面提供了篩選功能讓我們可以透過視覺化操作來進行初步的名稱篩選,但這對於理解當前資料庫全貌的需求來說遠遠不夠,因此我們可以透過下列指令來進行SQL資料庫的資料表檢視表純量函數預存程序觸發進行一系列的名稱篩選

DECLARE @Search NVARCHAR(500) = '%YourObjectName%'

SELECT
  QUOTENAME(DB_NAME()) + '.' + QUOTENAME(s.name) + '.' + QUOTENAME(o.name) AS 物件名稱,
  CASE
    WHEN o.type = 'U' THEN 'Table'
    WHEN o.type = 'V' THEN 'View'
    WHEN o.type = 'P' THEN 'StoredProcedure'
    WHEN o.type = 'FN' THEN 'ScalarFunction'
    WHEN o.type = 'TR' THEN 'Trigger'
  END AS 物件類別
FROM 
  sys.objects AS o
INNER JOIN 
  sys.schemas AS s ON o.schema_id = s.schema_id
WHERE 
  o.type IN ('U', 'V', 'P', 'FN', 'TR')
  AND o.name LIKE @Search
ORDER BY 
  物件類別, 物件名稱;

物件內文指令搜尋

我們都知道資料庫提供的資料表檢視表純量函數預存程序觸發等物件,背後其實都是一串SQL指令,那麼我們要如何知道某字串是否有出現在某資料表檢視表純量函數預存程序觸發的指令結構裡面呢?這時我們可以透過這個指令來快速查找,節省理解初期大量逐一判讀的時間:

DECLARE @Search NVARCHAR(500) = '%YourContent%'

SELECT
  QUOTENAME(DB_NAME()) + '.' + QUOTENAME(s.name) + '.' + QUOTENAME(o.name) AS 物件名稱,
  o.type_desc AS 物件類別,
  m.definition AS 指令細節
FROM
  sys.sql_modules AS m
INNER JOIN
  sys.objects AS o ON m.object_id = o.object_id
INNER JOIN
  sys.schemas AS s ON o.schema_id = s.schema_id
WHERE
  m.definition LIKE @Search
ORDER BY
  物件類別, 指令細節;

相關連結

MSSQL SQL NameSearch TableNameSearch ViewNameSearch StoredProcedureNameSearch ScalarFunctionNameSearch TriggerNameSearch ContentSearch TableContentSearch ViewContentSearch StoredProcedureContentSearch ScalarFunctionContentSearch TriggerContentSearch