2016-06-01 20 views
3
DECLARE @myTable TABLE( 
Name VARCHAR(50), 
Year INT, 
Hours INT) 

INSERT INTO @myTable *.... some values* 

DECLARE @var INT 
SET @var = 2015 

DECLARE @DynamicPivot VARCHAR(MAX) 

SET @DynamicPivot = 'SELECT * FROM 
@myTable PIVOT(SUM(Hours) FOR Year IN (' + @var + ')) AS PvtTable 

EXEC sp_executesql @DynamicPivot 

私は動的テーブルを作成し、ピボットを使用してテーブルを回転しようとしています。 @varの値は、動的テーブルYear INTに既に存在する値です。私は動的なピボットを実行しようとする場合を除いてすべてうまく動作します。それは、私が同じコードを同時に実行しているにもかかわらず、@myTableが宣言されていないというエラーを私に与えます。私は本当に問題を見つけることができないため、ピボット宣言に問題があります。何か案は?テーブル変数 "@myTable"を宣言する必要があります

+0

ダイナミクスクエリを使用する理由は何ですか? @varはどこから来ましたか? – qxg

+4

動的クエリの外部で宣言された変数は、動的クエリで使用できません。ここでは動的クエリの必要性がわかりません – Raj

+0

'sp_executesql'で実行される動的SQLは、残りのSQLとは別のバッチで実行されます。 –

答えて

5

使用#一時テーブルとだけnvarcharsp_executesql作品:

CREATE TABLE #myTable ( 
    Name VARCHAR(50), 
    Year INT, 
    Hours INT 
) 

INSERT INTO #myTable *.... some values* 

DECLARE @var INT 
SET @var = 2015 

DECLARE @DynamicPivot NVARCHAR(MAX) 

SET @DynamicPivot = ' 
SELECT * 
FROM #myTable 
PIVOT( 
SUM(Hours) FOR Year IN ([' + CAST(@var as nvarchar(10)) + ']) 
) AS PvtTable' 

EXEC sp_executesql @DynamicPivot 

DROP TABLE #myTable 
+0

'YEAR'と' @ var'は両方とも 'int'なので、INカッコで引用符を使う必要はありません。 – HoneyBadger

+0

@HoneyBadger引用符についてはわかりませんが、今すぐチェックすることはできません:) – gofr1

+1

大括弧は正しくありません。それは '@ var'を属性として識別します。 – HoneyBadger

4

あなたは、動的クエリ内のテーブル変数を使用する必要があります。..

DECLARE @DynamicPivot VARCHAR(MAX) 

SET @DynamicPivot = ' 
DECLARE @myTable TABLE( 
Name VARCHAR(50), 
Year INT, 
Hours INT) 

INSERT INTO @myTable *.... some values* 

DECLARE @var INT 
SET @var = 2015 

SELECT * FROM 
@myTable PIVOT(SUM(Hours) FOR Year IN (' + @var + ')) AS PvtTable' 

EXEC sp_executesql @DynamicPivot 
3

は内部変数を宣言する必要があり、これを試してみてください動的クエリ。

DECLARE @DynamicPivot VARCHAR(MAX) 

DECLARE @var INT 
SET @var = 2015 

SET @DynamicPivot = ' 
DECLARE @myTable TABLE( 
Name VARCHAR(50), 
Year INT, 
Hours INT) 

INSERT INTO @myTable *.... some values* 

SELECT * FROM 
@myTable PIVOT(SUM(Hours) FOR Year IN (' + @var + ')) AS PvtTable' 

EXEC sp_executesql @DynamicPivot 
関連する問題