2016-06-15 9 views
1

私は、以下を含むテーブルを持っている:私は、ユーザー定義のパラメータ@Checkに基づいてデータを受信したい何は動的に

ID Name Period0Id Period1Id Period2Id 

。この場合

declare @check int = 1; 

を私はテーブルからPeriod1Id値を取得する必要があります:
を前提とします。だから私はそのようなものを持っている必要があります:

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

しかし、私のクエリは機能していません。これをどうすれば解決できますか?

答えて

2

あなたのテーブルは、最初の通常のフォームではないようです。あなたは(0,1,2)の値を持つPeriodIndexのためのコラムやPeriodIdのための単一の列を持つことができますし、それはあなたが「できるだけWHERE PeriodIndex = @Check

だろうPeriod2Idする

の代わりにPeriod0Idのための3つの列試行中に変数で文字列補間を使用して列を選択します。動的SQLを使用してSQL文字列を動的に作成することができます。また、すべてが同じデータタイプを持っている場合は、オプションをハードコードするだけです。

DECLARE @check VARCHAR = 1 
DECLARE @sqlquery NVARCHAR(MAX) 
SET @sqlquery = N'SELECT ID, Name, StatusId = Period'[email protected]+'Id 
       FROM mytable' 
EXEC sp_executesql @sqlquery 
:ここ
Select ID, 
     Name, 
     StatusId = CASE @Check WHEN 0 THEN Period0Id 
           WHEN 1 THEN Period1Id 
           WHEN 2 THEN Period2Id 
        END 
From mytable 
1

は、本質的に、あなたの元のクエリを使用している動的な列を作成する別の方法であり、