SQL 服务器系统视图定义
SQL Server System View Definitions
有没有办法在 SSMS 中查看系统视图定义?我不知道如何使用 SQL Server Management Studio 实现这一点。
我想看的视图定义示例:[sys].[all_sql_modules]
.
谢谢
编辑:
第一个查询运行良好,但是我想看到的视图没有出现在这个查询中。
select top 100000
object_definition(a.[object_id]) as [object_definition_results],
b.[name] as [object_name],
b.[type],
case
when b.[type] = 'P' then 'SQL Stored Procedure'
when b.[type] = 'RF' then 'Replication-filter-procedure'
when b.[type] = 'V' then 'View'
when b.[type] = 'TR' then 'SQL DML Trigger'
when b.[type] = 'FN' then 'SQL Scalar Function'
when b.[type] = 'IF' then 'SQL inline table-valued function'
when b.[type] = 'TF' then 'SQL Table-Valued Function'
when b.[type] = 'R' then 'Rule (old-style, stand-alone)'
else ''
end as [Object Type Description]
from
[sys].[sql_modules] as a
inner join
[sys].[objects] as b
on
a.[object_id] = b.[object_id]
order by
[Object Type Description];
我也试过这个,但似乎那个视图甚至不在对象列表中。为什么会这样?
select top 10000
a.*
from
[sys].[objects] as a
where
a.[name] like '%sql%module%'
order by
a.[name];
我觉得很奇怪,他们认为从对象资源管理器中系统/目录视图的上下文菜单中删除脚本选项很有用,但他们保留了 Edit Top 200 Rows
的选项。我认为有人落后了。
在很多情况下,您可以通过以下两种方式之一获得它:
SELECT OBJECT_DEFINITION(OBJECT_ID(N'sys.all_sql_modules'));
SELECT definition FROM sys.all_sql_modules
WHERE [object_id] = OBJECT_ID(N'sys.all_sql_modules');
有时,系统对象的定义不在 master 中(而是在 resource database), can only be viewed using the DAC connection 中,或者根本不在 SQL 服务器中(想想 xp_cmdshell
).
为了查看过程的完整定义,您需要将结果转为文本(结果转为网格会将整个正文放在一行中),可能至少需要将默认结果更改为文本输出到最大 8192 个字符,如果这还不够,切换回网格和 convert to XML.
肯定有人会建议 sp_helptext
,但这并不总是有效;另外,它的输出很不稳定。
有没有办法在 SSMS 中查看系统视图定义?我不知道如何使用 SQL Server Management Studio 实现这一点。
我想看的视图定义示例:[sys].[all_sql_modules]
.
谢谢
编辑:
第一个查询运行良好,但是我想看到的视图没有出现在这个查询中。
select top 100000
object_definition(a.[object_id]) as [object_definition_results],
b.[name] as [object_name],
b.[type],
case
when b.[type] = 'P' then 'SQL Stored Procedure'
when b.[type] = 'RF' then 'Replication-filter-procedure'
when b.[type] = 'V' then 'View'
when b.[type] = 'TR' then 'SQL DML Trigger'
when b.[type] = 'FN' then 'SQL Scalar Function'
when b.[type] = 'IF' then 'SQL inline table-valued function'
when b.[type] = 'TF' then 'SQL Table-Valued Function'
when b.[type] = 'R' then 'Rule (old-style, stand-alone)'
else ''
end as [Object Type Description]
from
[sys].[sql_modules] as a
inner join
[sys].[objects] as b
on
a.[object_id] = b.[object_id]
order by
[Object Type Description];
我也试过这个,但似乎那个视图甚至不在对象列表中。为什么会这样?
select top 10000
a.*
from
[sys].[objects] as a
where
a.[name] like '%sql%module%'
order by
a.[name];
我觉得很奇怪,他们认为从对象资源管理器中系统/目录视图的上下文菜单中删除脚本选项很有用,但他们保留了 Edit Top 200 Rows
的选项。我认为有人落后了。
在很多情况下,您可以通过以下两种方式之一获得它:
SELECT OBJECT_DEFINITION(OBJECT_ID(N'sys.all_sql_modules'));
SELECT definition FROM sys.all_sql_modules
WHERE [object_id] = OBJECT_ID(N'sys.all_sql_modules');
有时,系统对象的定义不在 master 中(而是在 resource database), can only be viewed using the DAC connection 中,或者根本不在 SQL 服务器中(想想 xp_cmdshell
).
为了查看过程的完整定义,您需要将结果转为文本(结果转为网格会将整个正文放在一行中),可能至少需要将默认结果更改为文本输出到最大 8192 个字符,如果这还不够,切换回网格和 convert to XML.
肯定有人会建议 sp_helptext
,但这并不总是有效;另外,它的输出很不稳定。