下面直接放代碼:
一、利用sysobjects表和syscomments表進(jìn)行查詢
SELECT Name
FROM sysobjects o, syscomments s
WHERE o.id = s.id
AND text LIKE '%str%'
AND o.xtype = 'P'
這里解釋一下
sysobjects :在數(shù)據(jù)庫(kù)內(nèi)創(chuàng)建的每個(gè)對(duì)象(約束、默認(rèn)值、日志、規(guī)則、存儲(chǔ)過(guò)程等)在表中占一行。只有在 tempdb 內(nèi),每個(gè)臨時(shí)對(duì)象才在該表中占一行。
sysobjects 表結(jié)構(gòu):
| 列名 | 數(shù)據(jù)類型 | 描述 |
|---|---|---|
| name | sysname | 對(duì)象名,常用列 |
| id | int | 對(duì)象標(biāo)識(shí)號(hào) |
| xtype | char(2) | 對(duì)象類型。常用列。xtype可以是下列對(duì)象類型中的一種: C = CHECK 約束 D = 默認(rèn)值或 DEFAULT 約束 F = FOREIGN KEY 約束 L = 日志 FN = 標(biāo)量函數(shù) IF = 內(nèi)嵌表函數(shù) P = 存儲(chǔ)過(guò)程 PK = PRIMARY KEY 約束(類型是 K) RF = 復(fù)制篩選存儲(chǔ)過(guò)程 S = 系統(tǒng)表 TF = 表函數(shù) TR = 觸發(fā)器 U = 用戶表 UQ = UNIQUE 約束(類型是 K) V = 視圖 X = 擴(kuò)展存儲(chǔ)過(guò)程 |
syscomments:包含數(shù)據(jù)庫(kù)中每個(gè)視圖、規(guī)則、默認(rèn)值、觸發(fā)器、CHECK 約束、DEFAULT 約束和存儲(chǔ)過(guò)程的項(xiàng)。text 列包含原始的 SQL 定義語(yǔ)句。
syscomments 表結(jié)構(gòu):
| 列名 | 數(shù)據(jù)類型 | 描述 |
|---|---|---|
| name | sysname | 對(duì)象名,常用列 |
| id | int | 該文本適用的對(duì)象 ID |
| text | nvarchar(4000) | SQL 定義語(yǔ)句的實(shí)際文本。 解碼后的表達(dá)式的語(yǔ)義等同于原始文本,但是沒(méi)有語(yǔ)法保證。 例如,已解碼的表達(dá)式中刪除了空格。 |
返回所有出現(xiàn)過(guò)該字符串的存儲(chǔ)過(guò)程名:
| Name | |
|---|---|
| 1 | Table1 |
| 2 | Table2 |
| 2 | Table2 |
所以這個(gè)查詢的意思是,對(duì)兩個(gè)系統(tǒng)表進(jìn)行聯(lián)查,查找關(guān)鍵條件是SQL 定義語(yǔ)句的實(shí)際文本中包含‘str‘的字符串的、對(duì)象類型為’P‘的對(duì)象。
這在進(jìn)行例如一些提醒消息的str從哪個(gè)存儲(chǔ)過(guò)程拼接出來(lái)的這些情況下會(huì)非常方便,不需求一個(gè)個(gè)打開存儲(chǔ)過(guò)程排查