僅使用SELECT陳述句從資料庫中查找存盤程序名稱(不應在該串列中回傳帶有更新、插入的程序)。
uj5u.com熱心網友回復:
似乎是一個奇怪的請求,但您可以利用 sys.sql_module
SELECT [schema_name] = OBJECT_SCHEMA_NAME([object_id])
,[object_name] = OBJECT_NAME([object_id])
,definition
FROM sys.sql_modules
Where charindex('UPDATE ',definition)
charindex('DELETE ',definition)
charindex('INSERT ',definition)
=0
uj5u.com熱心網友回復:
嘗試自己決議程序 SQL 是災難的秘訣。如果您的一個程式具有以下任何一種情況,會發生什么情況?
SELECT * FROM [UpdateTable]
-- We don't want to update
UPDATE @MyTableVariable...
執行此操作的最終方法是使用sys.dm_sql_referenced_entities.
select schema_name = s.name, p.name
from sys.procedures p
join sys.schemas s on s.schema_id = p.schema_id
where not exists (select 1
from sys.dm_sql_referenced_entities(s.name '.' p.name, 'OBJECT') r
where r.is_updated = 1
);
請注意,這也考慮了任何型別的 DML,例如INSERT MERGE或DELETE。
有趣的是,它還忽略了對表變數和臨時表的修改。
資料庫<>小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/341841.html
標籤:sql sql-server
