我有一个标量函数,它返回VARCHAR
一个列名。
我想使用此结果作为选择查询的基础,因此:
SELECT dbo.udf_GetColName('Val1', ColumnFromThisTable, etc) AS myCol
FROM tbl_ThisTable WHERE ...
目前,这正确列出了每个值的 UDF 的实际输出,即列名。
我想要的是 select 语句返回从函数返回的列的值,所以:
SET @sql = 'SELECT ' + dbo.udf_GetColName('Val1', ColumnFromThisTable, etc) + ' AS myCol
FROM tbl_ThisTable WHERE ... '
并运行EXEC sp_executesql
有没有比动态 SQL 路由更好的方法?SQL 可以通过某种方式将该列作为 UDF 的输出进行查询?
编辑添加
这是业务需要管理选择输出的规则的地方,因此它们需要位于可更新的表中。如果它们被硬编码到SELECT
表值函数中,那么控制它们的不再是业务。
所以是的,查询是非常可定制的,但在这种情况下会是“一件好事”。
此外,有有限数量的参数udf_GetColName
。它接收一个源列名,一个源列值,它在规则表中进行查找。如果规则找到该列与该值的匹配,output column
则选择并返回一个,否则使用默认值output column
。这是需要选择的列,因此可能与输入或输入值完全不同。
如前所述,我很高兴听到任何其他想法,当然如果这很愚蠢,应该选择另一条路线!
回家前一天的最后编辑
我正在寻找一种方法来tbl_ThisTable
根据 中的其他列值选择要使用的列tbl_ThisTable
。
这些关于使用哪一列的规则需要在表中轻松更新 - 主要限制是数据库的接口/前端 - 我们只能返回直接数据集,因此不能使用前端做出此决定/连接多个数据集等...
如果有部署这些规则的好方法,可以在数据库中更新而无需重写代码,我很想听听。我现在只是在测试这个,所以设计很灵活。