从动态字符串返回列名

时间:2018-05-22 09:23:24

标签: sql sql-server

我想从动态字符串中获取列,在我的表中:MyTable2我有很多列/字段,它们是: MyVarCharColumnName1,MyVarCharColumnName2,MyVarCharColumnName3,MyVarCharColumnName4 以上这些字段是nvarchar(50), 我想知道如何在与另一个表连接时获得它们的值,如下例所示:

SELECT
  *,
  CASE
  WHEN Tbl1.MyId IN ('1', '2', '3', '4')
    THEN (SELECT 'MyVarCharColumnName' + bf.MyId
          FROM MyTable2)
  ELSE Tbl1.MyId
  END AS TheNameofId
FROM
  Tbl1

以上是错误的,因为它会将MyVarCharColumnName1作为TheNameofId值而不是MyVarCharColumnName1中的值返回

是否有一些sql函数可以从字符串中返回列名? 任何方式转换' MyVarCharColumnName1'到列对象?

1 个答案:

答案 0 :(得分:1)

确认您必须以您提出的方式编写动态查询,但除此之外,我们可以使用CASE

以下列方式执行相同操作
SELECT
  *,
  CASE
      WHEN Tbl1.MyId = 1 THEN MyVarCharColumnName1
      WHEN Tbl1.MyId = 2 THEN MyVarCharColumnName2
      WHEN Tbl1.MyId = 3 THEN MyVarCharColumnName3
      WHEN Tbl1.MyId = 4 THEN MyVarCharColumnName4
      ELSE Tbl1.MyId
  END AS TheNameofId
FROM Tbl1