SQL Server:IsMSShipped = 0但系统SP仍然返回

时间:2018-06-14 13:14:34

标签: sql-server sql-server-2008

SELECT DISTINCT 
OBJECT_SCHEMA_NAME (sc.object_id) as "schema", OBJECT_NAME(sc.object_id) as "name", sc.*   
-- FROM syscomments sc 
FROM sys.sql_modules sc 
WHERE "Definition" LIKE '%raiserror%'
and
OBJECTPROPERTY(object_id, 'IsMSShipped') = 0
and
OBJECT_NAME(sc.object_id) like '%diagram%'

为什么此查询会返回这些SP?他们不是来自微软吗?

sp_helpdiagramdefinition
sp_creatediagram
sp_renamediagram
sp_alterdiagram
sp_dropdiagram

1 个答案:

答案 0 :(得分:1)

对于在SQL Server安装期间创建的任何对象,

IsMSShipped 设置为1。 Diagram对象是可选的,仅在初始安装后添加到数据库中。

换句话说,虽然他们 来自MS,但他们不是来自MS的发货(至少不是因为MS正在定义“发货”)。

是的,我知道,这是愚蠢的,每个人都被这至少一次绊倒了。他们本应该称之为IsMSInstalled。只是去表明选择好名字的重要性。

处理此问题的SOP方法是在模式上过滤器(“sys”始终是schema_id 4)。