Sql Query 列出 SQL Server 2005 数据库中的所有视图

Posted

技术标签:

【中文标题】Sql Query 列出 SQL Server 2005 数据库中的所有视图【英文标题】:Sql Query to list all views in an SQL Server 2005 database 【发布时间】:2011-02-23 14:24:04 【问题描述】:

我需要一个 sql 查询来枚举 SQL Server 2005 中特定数据库的所有视图(我只需要视图名称)。提前致谢!

【问题讨论】:

【参考方案1】:

完成出发(按照已经提出的建议):

SELECT * FROM sys.views

这为每个视图提供了额外的属性,sys.objects(包含所有类型的对象共有的属性)或 INFORMATION_SCHEMA.VIEWS 中不提供这些属性。尽管 INFORMATION_SCHEMA 方法确实提供了开箱即用的视图定义。

【讨论】:

错误 - 无效的对象名称“sys.views”。我正在查询主数据库。【参考方案2】:
SELECT SCHEMA_NAME(schema_id) AS schema_name
,name AS view_name
,OBJECTPROPERTYEX(OBJECT_ID,'IsIndexed') AS IsIndexed
,OBJECTPROPERTYEX(OBJECT_ID,'IsIndexable') AS IsIndexable
FROM sys.views

【讨论】:

来源:blog.sqlauthority.com/2010/10/29/…【参考方案3】:
SELECT  *
FROM    sys.objects
WHERE   type = 'V'

【讨论】:

尽量避免使用通用的“sys.objects”——改用更具体的视图——sys.views @marc_s 你能解释一下为什么会这样吗?【参考方案4】:

在 where 条件下运行此添加 DatabaseName。

  SELECT TABLE_NAME, ROW_NUMBER() OVER(ORDER BY TABLE_NAME) AS 'RowNumber' 
  FROM INFORMATION_SCHEMA.VIEWS 
  WHERE TABLE_CATALOG = 'DatabaseName'

或删除where条件添加使用。

  use DataBaseName

  SELECT TABLE_NAME, ROW_NUMBER() OVER(ORDER BY TABLE_NAME) AS 'RowNumber' 
  FROM INFORMATION_SCHEMA.VIEWS 

【讨论】:

【参考方案5】:
select v.name
from INFORMATION_SCHEMA.VIEWS iv
join sys.views v on v.name = iv.Table_Name
where iv.Table_Catalog = 'Your database name'

【讨论】:

【参考方案6】:

有时您需要使用schema 名称进行访问,例如,您正在使用 AdventureWorks 数据库,您需要使用架构进行访问。

 SELECT s.name +'.'+v.name FROM sys.views v inner join sys.schemas s on s.schema_id = v.schema_id 

【讨论】:

比标准的“sys.views”更有帮助。不是每个人都在 DBO 模式中转储表【参考方案7】:

这是旧的,但我想我还是要把它放出来,因为我找不到一个可以从我有的每个视图中为我提供所有 SQL 代码的查询。所以这里是:

  SELECT SM.definition
  FROM sys.sql_modules SM
  INNER JOIN sys.Objects SO ON SM.Object_id = SO.Object_id
  WHERE SO.type = 'v'

【讨论】:

【参考方案8】:

死灵术。

既然你说所有观点,从技术上讲,迄今为止所有的答案都是错误的。 以下是获取所有视图的方法:

SELECT 
     sch.name AS view_schema 
    ,sysv.name AS view_name 
    ,ISNULL(sysm.definition, syssm.definition) AS view_definition 
    ,create_date 
    ,modify_date 
FROM sys.all_views AS sysv 

INNER JOIN sys.schemas AS sch 
    ON sch.schema_id = sysv.schema_id 

LEFT JOIN sys.sql_modules AS sysm 
    ON sysm.object_id = sysv.object_id 

LEFT JOIN sys.system_sql_modules AS syssm 
    ON syssm.object_id = sysv.object_id 

-- INNER JOIN sys.objects AS syso ON syso.object_id = sysv.object_id 

WHERE (1=1) 
AND (sysv.type = 'V') -- seems unnecessary, but who knows
-- AND sch.name = 'INFORMATION_SCHEMA' 
/*
AND sysv.is_ms_shipped = 0  
AND NOT EXISTS 
(
    SELECT * FROM sys.extended_properties AS syscrap
    WHERE syscrap.major_id = sysv.object_id
    AND syscrap.minor_id = 0 
    AND syscrap.class = 1 
    AND syscrap.name = N'microsoft_database_tools_support' 
)  
*/

ORDER BY 
     view_schema 
    ,view_name 

【讨论】:

以上是关于Sql Query 列出 SQL Server 2005 数据库中的所有视图的主要内容,如果未能解决你的问题,请参考以下文章

SQL Query (SQL Server 2008) 从两个表中检索数据并对结果进行分组

Query (SQL Server 2008 Express) 在 SQL Server Management Studio 中有效,但在 Delphi 中使用 ADODB 无效

SQL Server:列出范围之间的月份

SQL Server 2008 Query 生产速度慢,但开发速度快

SQL Server-2012 database query foundation

Understanding how SQL Server executes a query