2012-06-18 40 views
1

奇怪的是,這個工作幾個星期前。我需要在所有存儲過程中找到出現特定短語的所有實例。我們有數百個存儲過程,所以我想用SQL來告訴我它們在哪裏。我正在使用此語句:查詢到sys.sql_modules不會返回行

SELECT DISTINCT 
o.name, o.type_desc 
FROM sys.sql_modules m 
JOIN sys.objects o ON m.object_id = o.object_id 
WHERE m.definition LIKE '%view_cu_Account_Bills_b%' 

問題是返回零行。此問題似乎與sys.sql_modules一樣,如以下查詢:

SELECT TOP 5 * 
FROM sys.sql_modules 

還包含零行。在具有數百個存儲過程的數據庫中,爲什麼sys.sql_modules中沒有任何內容?我在MS SQL Server設置中丟失了什麼? (我正在使用2008年版)。

+2

你可能不要沒有足夠的權限。 [目錄視圖中元數據的可見性僅限於用戶擁有的或用戶已被授予某種權限的安全性。](http://msdn.microsoft.com/zh-cn/library/ms175081.aspx ) –

+0

這就是我的想法,但似乎我有權限......我可以改變存儲過程,我經常這樣做。我當然有能力查看它們...不會表明我應該在sys.sql_modules中看到它們嗎? – Kreg

+2

並且您正在用戶憑據和正確的數據庫上下文中運行查詢? –

回答

1

是的,正如馬丁·史密斯建議,首先要確保你的查詢是在正確的數據庫環境:

USE YOUR_DATABASE_NAME; 

否則,下面的查詢將不會返回任何東西:

SELECT TOP 5 * 
FROM sys.sql_modules;