簡體   English   中英

在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%'

OBJECT_DEFINITION

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM