如何在SQL Server 2008中显示数据库中所有视图的内容?有没有新的系统视图来做同样的事情?
答案 0 :(得分:5)
使用Management Studio最简单的方法是:
这将打开一个窗口,其中包含所选内容的视图定义。
编辑:如果要查询所有视图定义,可以执行以下操作:
Select VIEW_DEFINITION
From INFORMATION_SCHEMA.VIEWS
如果您将输出更改为文本而不是网格,它会为您提供所有视图的列表。
正如gbn指出的那样,如果它是您想要的架构,并且如果某些开发人员足够疯狂以创建超过4k字符的视图,那么INFORMATION_SCHEMA视图将为该视图的架构返回null。因此,在这种情况下使用系统表会更合适。 gbn解决方案的变体类似于SMS在幕后所做的那样:
Select smv.definition
FROM sys.all_views AS v
JOIN sys.sql_modules AS smv
ON smv.object_id = v.object_id
答案 1 :(得分:5)
SELECT
O.name, SM.definition
FROM
sys.objects O
JOIN
sys.sql_modules SM ON o.object_id = SM.object_id
WHERE
o.type = 'V'
“INFORMATION_SCHEMA”的列限制为nvarchar(4000),当您选择它时会导致截断视图定义:不要使用它
答案 2 :(得分:0)
为其他人添加此sqlcmd脚本作为4k限制并不好玩。感谢这个帖子。
-- :r meta_show_view_definition.sql
-- need user logon with ALTER permissions
-- :setvar ObjectName "<string>"
set nocount on
declare @sql varchar(max)
:out $(ObjectName).view.dump.sql
set @sql = '
select obj.name, sm.definition
from sys.objects obj
join sys.sql_modules sm on obj.object_id = sm.object_id
where
obj.type = "V" and
upper(obj.name) = upper("' + '$(ObjectName)' + '")'
exec (@sql)
go
:out stdout
set nocount off