视图能否自动识别它所基于的 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
我希望这至少能为您指明正确的方向。
C§
简短的回答是肯定的(见下面的例子)。长答案是,这可能取决于您的视图是如何构建的。
如果您使用的是 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)
这个简单的例子适合您的使用吗?请告诉我们。
想知道是否有人可以帮助我。我正在尝试在 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
我希望这至少能为您指明正确的方向。
C§
简短的回答是肯定的(见下面的例子)。长答案是,这可能取决于您的视图是如何构建的。
如果您使用的是 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)
这个简单的例子适合您的使用吗?请告诉我们。