Sql server 将数据对象表与视图中的关联属性表合并
设置如下:我有几个表保存数据对象的信息,这些数据对象可能有各种各样的数据位与它们关联。每个表都有一个关联的属性表,其中包含3位信息:Sql server 将数据对象表与视图中的关联属性表合并,sql-server,Sql Server,设置如下:我有几个表保存数据对象的信息,这些数据对象可能有各种各样的数据位与它们关联。每个表都有一个关联的属性表,其中包含3位信息: 与属性关联的行的id(整数) 短属性名称(
显而易见的解决方案是在应用程序代码中处理所有这些问题,但我很好奇这是否可以在SQL中完成。听起来您希望每个“对象”表及其“属性”表都有一个视图。如果我读错了,请纠正我。“使用变量作为列名的别名”的意图并不清楚。您是否希望将所有具有不同列的对象合并到一个视图中 建议为每个实体表创建一个视图,并连接到其相关的“属性”表 但问题是-为什么每个实体表都有一个匹配的属性表?他们为什么要分开?也许你把问题弄得更简单或模糊,所以我的问题可能是修辞性的
CREATE VIEW Foo AS
SELECT O.ID
,O.EverythingElse
,A.ShortName
,A.SomeVarcharValue
FROM
ObjectTable AS O --customer, invoice, whathaveyou
INNER JOIN
ObjectAttribute AS A ON A.ObjectID = O.ID
要从中消费,您可以:
从Foo中选择*其中ID=4
或
SELECT*FROM Foo,其中ShortName='Ender'
答案取决于您实际寻找的内容。视图的输出是每个对象的每个属性有一行还是每个对象的每个属性有一列?如果是前者,那么我不确定您为什么需要视图:
Select ...
From ObjectTable
Join AttributeTable
On AttributeTable.Id = ObjectTable.Id
然而,我怀疑你想要的是后者或类似的东西:
Select ...
, ... As Attribute1
, ... As Attribute2
, ... As Attribute3
...
From ObjectTable
在这种情况下,将生成的列在执行时是未知的,因为属性名称是动态的。这通常称为动态交叉表。通常,SQL语言不是为动态列生成而设计的。在T-SQL中实现这一点的唯一方法是使用一些非常动态的SQL。因此,最好在报告工具或中间层代码中完成。当我编写编辑时,我意识到我要寻找的是不可能的。你能为源表模拟一些虚拟数据吗,以及你希望如何查看它?根据Thomas的回答,我认为解决方法是不要按照我最初想要的方式来处理这个问题。我确实对每个实体表都有一个视图,对此我不是很清楚。拆分属性表的原因基本上是为了数据库结构的简单性和可读性。我们(我的团队)考虑过做一个大型属性表,但决定不做,以避免将属性项映射到它所引用的表的复杂性。我得出的结论与我在这一主题上的更多思考相同。感谢您的输入:)