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
物件類別, 指令細節;