【发布时间】:2011-01-12 13:36:51
【问题描述】:
sql2005
这是我的简化示例: (实际上这里有40多张桌子,我只展示了2张)
我有一个名为 tb_modules 的表,有 3 列(id、描述、表名作为 varchar):
1, UserType, tb_usertype
2, Religion, tb_religion
(最后一列实际上是不同表的名称)
我得到了另一个看起来像这样的表: tb_value(列:id、tb_modules_ID、usertype_OR_religion_ID) 价值观:
1111, 1, 45
1112, 1, 55
1113, 2, 123
1114, 2, 234
所以,我的意思是 45、55、123、234 是用户类型或宗教 ID (45、55 个用户类型,123、234 个宗教 ID)
别评判,数据库不是我设计的
问题 如何进行选择,显示 * from tb_value,加上一列 这一列将是 tb_usertype 中的 TITLE 或 tb_religion 表中的 RELIGIONNAME
我想做一个通用的东西。 最初在考虑可能是一个返回字符串的 SQL 函数,但我想我需要动态 SQL,这在函数中是不行的。
谁有更好的主意?
【问题讨论】:
-
我认为您需要为此使用动态 sql,但我猜如果它在函数中不正常,那么您的查询也不会正常。
-
实际的答案是你需要调用一个特殊的操作,叫做“construct a new design”。
-
看看下面 Ken Down 的解决方案,它使用 UNION 视图从根本上为您纠正结构(并且遵守您的“不判断”请求)。
标签: sql-server-2005 database-design dynamic-sql sql-function