SQL Server:从sys.tables和sys.views中进行选择

Chr*_*rdi 6 sql sql-server

下面的SQL似乎可以正常工作,但是我想知道是否有更好的方法来编写此代码。我正在尝试选择具有特定名称的所有视图和表。如果找到匹配项,则只能有一个返回值。

SELECT DISTINCT name 
FROM sys.tables 
WHERE name = 'MyName'  

UNION ALL

SELECT DISTINCT name 
FROM sys.views 
WHERE name = 'MyName'
Run Code Online (Sandbox Code Playgroud)

Eli*_*Eli 3

还有另一个视图可以帮助您 - 它是一个包含表和视图的单个视图。在性能方面,我的单表查询性能更好,尽管您只会在具有大量表的数据库上注意到。我为此目的修改了您的查询。

SELECT 
    DISTINCT NAME 
FROM SYS.OBJECTS
WHERE TYPE IN ('U','V')
AND NAME= 'MYNAME'
Run Code Online (Sandbox Code Playgroud)

U = 用户表
V = 视图

  • 与原始查询的语义不完全相同。如果他们有一个名为“dbo.MYNAME”的表和一个名为“dbp.MYNAME”的视图 (2认同)