在SQL Server 2008中显示视图内容

时间:2010-03-12 05:12:58

标签: sql-server sql-server-2008

如何在SQL Server 2008中显示数据库中所有视图的内容?有没有新的系统视图来做同样的事情?

3 个答案:

答案 0 :(得分:5)

使用Management Studio最简单的方法是:

  1. 在Management Studio中查找数据库
  2. 在数据库中,单击左侧的Views文件夹(官方称为对象资源管理器),该文件夹应显示右侧视图的列表。如果没有,则需要转到“视图”菜单并选择“对象详细信息”。
  3. 选择所有观看次数。
  4. 右键单击所选视图,然后选择“脚本视图为” - >创建至 - >新查询窗口
  5. 这将打开一个窗口,其中包含所选内容的视图定义。

    编辑:如果要查询所有视图定义,可以执行以下操作:

    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