[英]How to add tracing/debug output to stored procedures in Sql Server (2008)
[英]Finding stored procedures with errors in SQL Server 2008?
我有一個數據庫,它包含近200個表和3000個存儲過程。
我已經從某些表中刪除了一些字段,我現在如何找到存儲過程,其中引用了這些刪除的字段?
您可以使用sys.sql_modules
SELECT
OBJECT_NAME(object_id)
FROM
sys.sql_modules
WHERE
definitiion LIKE '%MyDeletedColumn%'
INFORMATION_SCHEMA視圖對此不可靠,因為該定義分為幾個nvarchar(4000)行。 上面的兩種方法返回nvarchar(max)
編輯:鑒於SQL搜索是免費的marc_s注釋,這將是一個更好的解決方案。
看看名為SQL Search的免費 Red-Gate工具,它會執行此操作 - 它會在整個數據庫中搜索任何類型的字符串。
對於任何DBA或數據庫開發人員來說,它都是必備工具 - 我是否已經提到它可以完全免費用於任何類型的使用?
因此,在您的情況下,您可以鍵入您刪除的列名,並選擇僅搜索您的存儲過程 - 在一秒左右的時間內,您將擁有包含該特定列名的所有存儲過程的列表。 絕對棒極了!
select object_name(object_id), *
from sys.sql_module
where definition like '%ColName%'
一種可能的方法是使用SET SHOWPLAN_XML ON
激活的虛擬參數調用每個存儲過程。 這不會運行該過程,但會生成計划的.xml表示形式 - 如果缺少引用的列,則會失敗。 但是,如果你使用#temp表,那么無論如何都會失敗。 :(
您很可能希望自動執行此過程,而不是寫出3000個過程調用。
免責聲明:這不是一個挑選缺失列的防彈方法,但祝你好運找到更好的東西!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.