bub*_*uro 18 sql sql-server-2005
我想创建一个查询列出所有用户定义的存储过程,不包括那些系统存储过程,考虑到:
因为你可以在SQL 2005中的单独文件夹中看到"系统存储过程",所以必须有某个属性或标志.有人知道吗?
编辑:以下建议的组合对我有用:
select *
from
sys.objects O LEFT OUTER JOIN
sys.extended_properties E ON O.object_id = E.major_id
WHERE
O.name IS NOT NULL
AND ISNULL(O.is_ms_shipped, 0) = 0
AND ISNULL(E.name, '') <> 'microsoft_database_tools_support'
AND O.type_desc = 'SQL_STORED_PROCEDURE'
ORDER BY O.name
Run Code Online (Sandbox Code Playgroud)
Ale*_*exS 14
你应该使用这样的东西:
select * from sys.procedures where is_ms_shipped = 0
Run Code Online (Sandbox Code Playgroud)
您可以猜到,关键在于is_ms_shipped属性(它也存在于sys.objects视图中).
更新.最初错过了关于is_ms_shipped的观点.
这是Management Studio实际用于检索"系统存储过程"列表的代码(条件)
CAST(
case
when sp.is_ms_shipped = 1 then 1
when (
select
major_id
from
sys.extended_properties
where
major_id = sp.object_id and
minor_id = 0 and
class = 1 and
name = N''microsoft_database_tools_support'')
is not null then 1
else 0
end AS BIT) = 1
Run Code Online (Sandbox Code Playgroud)
这里sp指的是sys.all_objects系统视图.