4

是否可以基于另一个表创建具有动态列名的视图(不是存储过程)?例如:

Code:
CodeId|Description
------------------
     1|Title
     2|Notes

Data:
DataId|Content|CodeId|GroupId
-----------------------------
     1|Title1 |     1|      1
     2|Note1  |     2|      1
     3|Title2 |     1|      2
     4|Note2  |     2|      2

Select Result:
GroupId|Title |Notes
-------------------
      1|Title1|Note1
      2|Title2|Note2

列名“Title”和“Notes”将来自该Code表。我猜答案是否定的,但想确认一下。谢谢!

编辑:我明白这怎么可能是“危险的”。如果有人更新代码描述,视图会发生变化,从而破坏任何依赖于列名的 SQL。在这种情况下,我可以改用 CodeId,它不允许更改。

4

3 回答 3

1

我在想,更糟糕的情况是,您可以在返回的第一行包含所有列标题的情况下执行某些操作。会有点棘手,你可能不得不遭受 UNION 的性能打击,但听起来是可行的。

于 2010-07-09T16:52:45.153 回答
1

您可以使用 Java 或 C 或任何使用数据库中的值动态创建“创建视图”语句然后执行它的程序来编写程序。

如果您正在寻找一种仅使用 SQL 语句的方法,我同意答案可能是“无法完成”,但我不愿意做出这样的陈述,因为人们总是想出聪明的方法来做我从未想过的事情。

于 2010-07-09T16:56:13.343 回答
1

EAV(实体-属性-值)模型的危险有很多,而且您只是在为将来的大量头痛做好准备。话虽如此,您的具体问题似乎可以解决我。你已经被警告了...

您可以通过在代码表上放置触发器来做到这一点。每当有人添加、删除或更新表中的某一行时,触发器将负责使用正确的语句重新创建视图。

于 2010-07-09T17:48:14.897 回答