如何动态地将属性名称写入选择查询

时间:2016-06-15 16:31:49

标签: sql sql-server sql-server-2008

我有一张表,包括:

ID Name Period0Id Period1Id Period2Id

我希望根据用户定义的参数@check接收数据 让我们假设:

declare @check int = 1;

在这种情况下,我需要从表中获取Period1Id值。所以我需要有类似的东西:

Select ID, Name, StatusId = Period + @check + Id  --  @check is the parameter
From mytable

但是,我的查询无效。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

您的表格看起来不是第一个正常形式。

而不是Period0Id到Period2Id的三列,你可以有一个PeriodIndex列,其值为(0,1,2),一列为PeriodId,然后它只是一个WHERE PeriodIndex = @Check

您无法在尝试时使用字符串插值和变量选择列。您可以使用动态SQL动态创建SQL String。或者只是硬编码选项,如果它们都具有相同的dataype。

Select ID, 
       Name, 
       StatusId = CASE @Check WHEN 0 THEN Period0Id
                              WHEN 1 THEN Period1Id
                              WHEN 2 THEN Period2Id
                   END
From mytable

答案 1 :(得分:1)

以下是另一种创建动态列的方法,它主要使用原始查询:

DECLARE @check VARCHAR = 1
DECLARE @sqlquery NVARCHAR(MAX)
SET @sqlquery = N'SELECT ID, Name, StatusId = Period'+@check+'Id
                FROM mytable'
EXEC sp_executesql @sqlquery