我有一张表,包括:
ID Name Period0Id Period1Id Period2Id
我希望根据用户定义的参数@check接收数据 让我们假设:
declare @check int = 1;
在这种情况下,我需要从表中获取Period1Id值。所以我需要有类似的东西:
Select ID, Name, StatusId = Period + @check + Id -- @check is the parameter
From mytable
但是,我的查询无效。我该如何解决这个问题?
答案 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