2009-10-22 28 views
0

我非常尷尬,但我不記得MS SQL Server SP的名稱,它搜索您的數據庫中的指定文本字符串,並返回包含該字符串的所有表名,函數,存儲過程等。我無法在幫助中查找它,因爲爲了獲得幫助,您需要知道它的名字!這就像sp_findtext查找文本字符串的SQL SP名稱是什麼?

它叫什麼?

來吧,最快的手指得到答案功勞! :)

+0

有這樣的SP?該死的,我自己寫了這樣的東西,因爲我以爲沒有那樣的東西...... – 2009-10-22 09:16:57

+0

啊,原來沒有 - 我以爲有人在我上一份工作中寫過它...... :) – 2009-10-22 09:33:09

回答

1

http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=32319

CREATE PROCEDURE sp_FindText @text varchar(8000), @findtype varchar(1)='P' AS 
SET NOCOUNT ON 
IF @findtype='P' SELECT DISTINCT Len(SubString(text,1, PatIndex('%' + @text + '%', text)))-Len(Replace(SubString(text,1, PatIndex('%' + @text + '%', text)),char(13),''))+1 AS Line, 
--PatIndex('%' + @text + '%', text) AS Position, 
OBJECT_NAME(id) AS ProcName 
FROM syscomments 
WHERE text like '%' + @text + '%' 
ORDER BY ProcName, Line 

IF @findtype='C' EXEC('SELECT TABLE_NAME + ''.'' + COLUMN_NAME AS TableColumn FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME LIKE ''%' + @text + '%'' ORDER BY TableColumn') 

IF @findtype='T' EXEC('SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE ''%' + @text + '%'' ORDER BY TABLE_NAME') 
GO 

它不僅搜索過程和視圖定義的文本,它也會找到表,視圖和列名:

EXEC sp_FindText 'myTable' --or-- EXEC sp_FindText 'myTable', 'P' --finds procedures/views containing 'myTable' in their definition/code 
EXEC sp_FindText 'myTable', 'T' --finds tables/views containing 'myTable' in their name 
EXEC sp_FindText 'myCol', 'C' --finds columns containing 'myCol' in their name 
+0

這是最好的,最通用的。謝謝! – 2009-10-22 09:45:10

+0

http://www.lmgtfy.com/?q=sp_findtext – 2009-10-22 10:04:24

+0

但是錯誤... syscomments只存儲nvarchar(4000),所以如果4個字母的搜索字符串在3999開始,所以這是不可靠的 – gbn 2009-11-18 05:09:56

0

對結果的快速檢查這些:

select * from sysobjects where [name] like 'sp_%' order by 1 
select * from master..sysobjects where [name] like 'sp_%' order by 1 

你會發現它是什麼給你。

乾杯!

+0

你知道「 ORDER BY 1「完全沒用,不是嗎? – 2009-10-22 11:58:13

+0

它怎麼沒用?它按第一個輸出欄進行排序。 – Tadmas 2009-10-22 13:22:15

+0

如果你不知道它是什麼,那將是完全無用的。 – jerjer 2009-10-23 02:20:21