2011-10-12 25 views
2

如何查找包含UNION關鍵字的所有視圖和SP?如何查找使用UNION的數據庫中的所有對象

(備用的問題:在什麼系統表存儲SP的文本和查看)

謝謝

+1

如果你需要一個工具,那麼你可以使用[RedGate SQL Search](http://www.red-gate.com/products/sql-development/sql-search/)。 –

+0

謝謝你的回答 – bzamfir

回答

3

這是一個有點天真,但可行的例子:(SQL服務器上測試2005 & 2008 R2)

use msdb; 

SElECT * FROM sys.all_sql_modules 
WHERE 
(definition LIKE '%CREATE VIEW%' OR 
definition LIKE '%CREATE PROCEDURE%') 
AND definition LIKE '%UNION%' 

爲了鞏固它只是加入通過object_id鏈接和過濾器的視圖和存儲過程通過對象類型而不是使用LIKE。

簡單:

SElECT * FROM sys.all_sql_modules 
WHERE definition LIKE '%UNION%' 

警告:由於我們執行對每個對象的創建腳本LIKE比較,我們也將在字UNION拿起如果當它出現/在註釋中。這可能對你很好,但如果你需要結果更具確定性,並避免這種情況下,你的WHERE子句將需要更復雜,可能使用正則表達式來優化結果。

2

這些東西存儲在sys.sql_modules

3

個人而言,我喜歡使用INFORMATION_SCHEMA觀點:

對於存儲過程:

SELECT 
    * 
FROM 
    INFORMATION_SCHEMA.ROUTINES 
WHERE 
    ROUTINE_TYPE = 'PROCEDURE' 
    AND 
    --ROUTINE_DEFINITION LIKE '%union%' <-- 4,000 character limitation 
    OBJECT_DEFINITION(OBJECT_ID(SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME)) 
     LIKE '%union%' 

而對於訪問量:

SELECT 
    * 
FROM 
    INFORMATION_SCHEMA.VIEWS 
WHERE 
    --VIEW_DEFINITION LIKE '%union%' <-- 4,000 character limitation 
    OBJECT_DEFINITION(OBJECT_ID(TABLE_SCHEMA + '.' + TABLE_NAME)) LIKE '%union%' 

這些視圖限於定義,你是哪個數據庫目前USE ing。

另外,有a wonderful tool from xSQL software,讓您的Microsoft SQL Server 2005和2008

UPDATE強大的搜索功能:由於@Bogdan指出的,INFORMATION_SCHEMA定義僅限於第4000個字符。我已更新我的答案以包含解決方法。在這一點上,追求sys視圖可能會更容易。

+0

+1很好的使用信息模式。 – Kuberchaun

+0

ROUTINE_DEFINITION僅限於4000個字符('NVARCHAR(4000)')。 –

+0

@BogdanSahlean:謝謝你的信息 - 我沒有意識到是這樣。 –

相關問題