2009-02-17 22 views
2

我實際上在我的數據庫中有100個SP。我必須找到一組10個SP,其中有特別的評論。有沒有任何搜索查詢。在SP中搜索

回答

3

找到this文章,如果您使用SQL Server

我一定要保持這種代碼的拷貝爲我所用:)

而且您以後正是這不,它不只是爲評論工作,但似乎適用於SP中的所有文本。

編輯

,我們提供了簡單的代碼的副本,但都歸功於萊斯·史密斯

CREATE PROCEDURE Find_Text_In_SP 
@StringToSearch varchar(100) 
AS 
    SET @StringToSearch = '%' [email protected] + '%' 
    SELECT Distinct SO.Name 
    FROM sysobjects SO (NOLOCK) 
    INNER JOIN syscomments SC (NOLOCK) on SO.Id = SC.ID 
    AND SO.Type = 'P' 
    AND SC.Text LIKE @stringtosearch 
    ORDER BY SO.Name 
GO 
+0

syscomments中是零散的,看到克里斯汀的回答 – jaraics 2011-05-05 12:01:45

0

我不記得確切的名稱表,但它會像這樣的東西。試一試。

SELECT sysobjects.name 
FROM syscomments, sysobjects 
WHERE syscomments.id=sysobjects.id 
WHERE syscomments.TEXT LIKE ‘%particular comment%’ 
1

選擇OBJECT_NAME(ID),*從syscomments中WHERE文本LIKE 'WhateverYouAreSearchingFor'

+0

syscomments中的文本被割裂成4K – jaraics 2011-05-05 09:51:51

0

你可以使用這個INFORMATION_SCHEMA:

select * 
from information_schema.routines 
where routine_definition like '%your comment to find%' 

記住,這只是看起來通過前4096個字符(我相信...) - 要搜索更多的字符,你必須直接查詢底層系統表。看一看在INFORMATION_SCHEMA.ROUTINES視圖的定義,看看哪個系統的表,那麼查詢

編輯:@裏奇的回答是,如果你需要查詢超過4096個字符

1

我你需要什麼不知道這是否是最好的解決方案,但下面的工作(儘管可能會很慢):

  1. 在SQL Server Management Studio中打開數據庫。
  2. 在對象資源管理器中,右鍵單擊數據庫任務>生成腳本。
  3. 單擊下一步按鈕3次直到您選擇對象類型步驟。
  4. 檢查存儲過程,然後單擊下一步。
  5. 單擊全選以選擇所有sp,或者如果您可以以某種方式限制sp,請只選擇要搜索的sp。
  6. 單擊完成,然後再次完成。
  7. 單擊關閉。
  8. 您現在應該擁有所有sp的腳本,因此您可以搜索它們。
2

請注意,如果字符串搜索跨越syscomments中記錄的邊界,syscomments搜索方法將失敗。

100%我想你將不得不腳本的存儲過程中進行版本控制庫等

建議考慮存儲每個存儲過程在一個單獨的文件數據庫(和商店),而不是僅僅改變他們就地在DB - 然後你可以使用你喜歡的編輯器做一個「查找」(與「替換」如果這是合適的)

1

在另一個SO問題發現這一點,學分去原來的回答者,gbn

SELECT 
    OBJECT_NAME(object_id) 
FROM 
    sys.sql_modules 
WHERE 
    definition LIKE '%' + 'WhatIWant' + '%' 

它爲對象不再那麼4K