如何根据其他表中的字段串联动态设置 SQL 字段名称?

Posted

技术标签:

【中文标题】如何根据其他表中的字段串联动态设置 SQL 字段名称?【英文标题】:How can you dynamically set a SQL field name based on a concatenation of fields from other tables? 【发布时间】:2012-07-20 06:39:59 【问题描述】:

我有两张桌子。 projects表中的字段名存储在fieldname表中

项目表

RecordID, ProjectID, Field1, Field2, Field3, Field4,...,Field20

字段名称表

FieldNameID、ProjectID、FieldNumber、FieldName

是否可以从字段名称实际上是 FieldNames.FieldName 的 Projects 表中返回结果?您可以连接 'Field'+FieldNames.FieldNumber 以返回 Fieldname,然后将其用作 Projects 中 Field(x) 的别名吗?

即:而不是“Field1”,它将是 FieldNames.FieldName 其中 Projects.ProjectID=FieldNames.ProjectNames 和 FieldNumber=1

【问题讨论】:

【参考方案1】:

您可以使用动态 SQL 或将值映射到字段的大型 case 语句来做到这一点,或者通过创建一个包含每个组合的视图并在 where 子句中使用适当的代码来获取正确的行。

但是,在我看来,你完全走错了路,在没有可怕警告的情况下帮助你走得更远是完全不负责任的。所以这里是:

您使用的数据库设计是一种非常糟糕的设计反模式,并且以一种特别臭的方式违反了最佳实践(例如“代码异味”,您有“数据库异味”)。不要将列名存储在列中。这是错误的。会疼的。它会让你的数据库变得邪恶。专业人士会偷偷地大声嘲笑它。我是认真的。

【讨论】:

以上是关于如何根据其他表中的字段串联动态设置 SQL 字段名称?的主要内容,如果未能解决你的问题,请参考以下文章

如何用SQL语言检索表中的字段名

SQL 查询某字段数据所在的表

MYSQL如何根据变量的值来选择字段进行查询

SQL查询根据值和字段名从两个表中获取计数

用SQL怎样根据一个表种的字段ID查出另一个表中的数据?

SqlServer中的数据根据该表中某字段的值的结果决定是不是显示