2016-11-15 144 views
1

問題:在磁盤上有什麼地方可以找到數據庫實例上每個過程/觸發器的人類可讀文件?存儲過程和其他對象在磁盤上的位置?

我已經瀏覽了我的磁盤上的Program Files\Microsoft SQL Server\,但它主要是.dll/.rll文件。

我問的原因是因爲我的公司已決定將某個VARCHAR(10)字段增加到VARCHAR(50),並且此字段在350多個存儲過程/觸發器中出現。我的工作是弄清楚哪些腳本需要修改以解釋這個字段長度的增加。如果我可以寫一個腳本來解析這些文件並找出與各種不同的正則表達式匹配的文件,那就太好了。

+3

在數據庫本身。使用'syscomments'或'sys.sql_modules'。 – shawnt00

回答

3

as shawnt00提到的存儲過程[SP],函數,表定義等都存儲在數據庫文件本身而不是文件系統中。但是,您可以使用系統視圖來查詢SP或功能文本,以嘗試查找您正在查找的列/變量。

一個例外是任何加密的對象,因爲對象的文本定義不會以明文顯示,而是會被加密,因此不會從這樣的查詢中返回。

SELECT 
    SCHEMA_NAME(o.schema_id) as SchemaName 
    ,o.name AS ObjectName 
    ,o.type 
    ,o.type_desc 
    ,m.definition as ObjectText 
FROM 
    sys.sql_modules m 
    INNER JOIN sys.objects o 
    ON m.object_id = o.object_id 
WHERE 
    m.definition LIKE '%VARCHAR(10)%' 
+1

是的,我使用'sys.sql_modules'來識別感興趣的350多個腳本,但是我並不知道「定義」列包含的是什麼。進一步展望,我現在明白了。我可以從我的代碼執行該查詢,然後遍歷結果並以這種方式解析出感興趣的過程。謝謝。 – sab669

+0

是的,祝你好運,350+聽起來不是很有趣,但一直在那裏:) – Matt

相關問題