不知是否有人能帮助我。我试图建立一个表上的视图,允许我把表名作为一个额外的列进入该视图。我可以通过提到' TableName' AS ColumnA
'来手动完成此操作,但我想看看是否有一种方法可以让SQL从自己的查询中获取表名,并将其添加为列。
No。这样做的问题可能是,一个视图可以绘制多个表。你在找我。parent。name或者this。parent。name。更准确地说,是基于连接到创建视图的所有表的Me.parents(0)、Me.parents(1)等等。另外,一个视图可以基于其他视图。然后,如果依赖级别3的视图想要查看它的曾祖表名,则引用看起来像:Me.parents_at_up_level(0).name。然而,一个好的想法和良好的思考,这应该是可能的。
简短的回答是肯定的(参见下面的例子)。长一点来说,这可能取决于你的视图是如何构造的。
如果你使用的是SQL Server 2008或更高版本,你可以使用sys。获取DB对象的依赖项信息。
让我们用视图试试:
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)
这个简单的例子适合你的用法吗?
我假设您正在处理一组至少有1列相同的表。在这种情况下,您可能会使用合并函数来确定该列的值。在这种情况下,您可以使用case块来跟踪它来自的表。下面类似的内容可能对您有用:
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§