我試圖找出存儲過程包含一段文本(有點像Grep for MS SQL)。所以我可以找到一個表的名稱並將其替換。我如何找到什麼存儲過程包含一段文本
例如,如果我想查找我的數據庫存儲過程包含表名「clients_users」
我試圖找出存儲過程包含一段文本(有點像Grep for MS SQL)。所以我可以找到一個表的名稱並將其替換。我如何找到什麼存儲過程包含一段文本
例如,如果我想查找我的數據庫存儲過程包含表名「clients_users」
下面的代碼將有助於找到所有與一個或多個特定表相關的存儲過程(SP)。 sp_help和sp_depends並不總是返回準確的結果。
----選項1
SELECT DISTINCT so.name
FROM syscomments sc
INNER JOIN sysobjects so ON sc.id=so.id
WHERE sc.TEXT LIKE '%tablename%'
----選項2
SELECT DISTINCT o.name, o.xtype
FROM syscomments c
INNER JOIN sysobjects o ON c.id=o.id
WHERE c.TEXT LIKE '%tablename%'
執行下面的查詢將產生所需的結果。將foobar替換爲需要在存儲過程中找到的文本。對於SQL Server 2005
SELECT ROUTINE_NAME, ROUTINE_DEFINITION
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_DEFINITION LIKE '%foobar%'
AND ROUTINE_TYPE='PROCEDURE'
的一種方式和多達
SELECT NAME
FROM sys.procedures
WHERE OBJECT_DEFINITION(object_id) LIKE '%clients[_]users%'
你需要[]各地_自_指任何字符,當你做一個通配符搜索
如果您發佈的代碼,XML或數據樣本,**請**突出顯示文本的那些行編輯器,然後單擊編輯器工具欄上的「代碼示例」按鈕(「{}」),以良好地格式化和語法突出顯示它! – 2012-07-21 15:07:45
感謝marc,那是一個很好的建議,因爲我在想如何做這個格式化。 – 2012-07-21 15:12:17