视图能否自动识别它所基于的 table 个名称?

Can a view auto-identify the table name(s) on which it is based ?

想知道是否有人可以帮助我。我正在尝试在 table 上构建一个视图,该视图允许我将 table 名称作为额外的列放入该视图中。我可以通过提及'TableName' AS ColumnA,通过手动过程来做到这一点,但我想看看是否有办法让我 SQL 从它自己的名称中获取 Table 名称查询以将其添加为列。

没有。这个问题可能是,一个视图可以利用多个 tables。您正在寻找 Me.parent.name 或 this.parent.name。更准确地说,Me.parents(0)、Me.parents(1) 等等,基于为创建视图而连接的所有 table。此外,一个视图可以基于其他视图。然后,引用看起来像:Me.parents_at_up_level(0).name,如果依赖级别 3 的视图想要查看它的曾祖父-table-name。尽管如此,一个好主意和好想法,这应该是可能的。

我假设您正在处理一组至少有 1 列相同的 table。在这种情况下,您可能正在使用合并函数来确定该列的值。在这种情况下,您可以使用 case 块来跟踪它来自的 table 。类似于以下的内容可能对您有用:

CASE WHEN a.col <> '' THEN 'Table A'
     WHEN b.col <> '' THEN 'Table B'
     WHEN c.col <> '' THEN 'Table C'
     ELSE 'Table D'
END AS colA,
COALESCE(a.col, b.col, c.col, d.col) AS colB

我希望这至少能为您指明正确的方向。

简短的回答是肯定的(见下面的例子)。长答案是,这可能取决于您的视图是如何构建的。

如果您使用的是 SQL Server 2008 或更高版本,您可以使用 sys.dm_sql_referenced_entities 获取数据库对象的依赖信息。

我们来试试看:

create table myTable (myColumn int, myOtherColumn char(1));
insert into myTable select 1, 'a';
insert into myTable select 2, 'b';

create view myView as
select t.*, e.referenced_entity_name
from myTable t
    join sys.dm_sql_referenced_entities ('dbo.myView', 'OBJECT') e
        on e.referenced_minor_id = 0;

select * from myView;

结果:

myColumn myOtherColumn referenced_entity_name
-------- ------------- ----------------------
       1 a             myTable
       2 b             myTable

(2 row(s) affected)

这个简单的例子适合您的使用吗?请告诉我们。