Sql server 在SQLServer2008中显示视图内容
如何在SQL Server 2008中显示数据库中所有视图的内容?是否有新的系统视图可以执行相同的操作?使用Management Studio最简单的方法是: 在ManagementStudio中查找数据库 在数据库中,单击左侧的Views文件夹,正式名称为Object Explorer,它将在右侧显示视图列表。如果没有,则要转到“视图”菜单并选择“对象详细信息”。 选择所有视图。 在所选视图上单击鼠标右键,然后选择“脚本视图为->创建到->新建查询窗口” 这将打开一个窗口,其中包含所选内容的视图定义 编辑:如果要查询所有视图定义,可以执行以下操作:Sql server 在SQLServer2008中显示视图内容,sql-server,sql-server-2008,Sql Server,Sql Server 2008,如何在SQL Server 2008中显示数据库中所有视图的内容?是否有新的系统视图可以执行相同的操作?使用Management Studio最简单的方法是: 在ManagementStudio中查找数据库 在数据库中,单击左侧的Views文件夹,正式名称为Object Explorer,它将在右侧显示视图列表。如果没有,则要转到“视图”菜单并选择“对象详细信息”。 选择所有视图。 在所选视图上单击鼠标右键,然后选择“脚本视图为->创建到->新建查询窗口” 这将打开一个窗口,其中包含所选内容的视
Select VIEW_DEFINITION
From INFORMATION_SCHEMA.VIEWS
如果您将输出更改为文本而不是网格,它将为您提供所有视图的列表
正如gbn所指出的,如果它是您想要的模式,并且某个开发人员疯狂地创建了一个包含超过4k个字符的视图,那么对于该视图的模式,信息_schema views将返回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
INFORMATION_SCHEMA的列限制为nvarchar4000,当您选择它时,它将导致视图定义被截断:不要使用它,为其他人添加此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
你所说的检查内容到底是什么意思?检查什么?检查它是否运行?查找某些列?我想查看数据库中所有视图的定义谢谢..能否共享T-SQL脚本以一次显示所有视图定义?完成。您可以通过INFORMATION_SCHEMA.views查询它们,哪个更好?sys.views或信息\u SCHEMA.views?sys.views是SQL Server专有的。模式视图的信息应该具有一定的通用性,因此,如果给出选择,将是首选方法。然而,这实际上取决于偏好。我发现架构视图中的信息更容易阅读。@gbn不正确。如果视图def超过4K,则将改为null。它不会截断,不是真的。根据BOL:如果定义的长度大于nvarchar4000,则此列为空。否则,此列为视图定义文本。所以你不应该被截断。如果您的视图超过4k,那就另当别论了。可能文档已经过时了,因为我有一个视图的定义大于4000,并且它正在被截断。@Thomas:请随意为您的视图使用信息模式,因为这些视图通常较小。但是,对于较长的存储过程,我将使用sys.sql_模块。但是为什么不对所有代码使用相同的方法呢?在现实生活中,我想100%地确定我得到了正确的数据。BOL数据类型仍然是NVARCH4000
-- :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