列名が動的に生成されるピボットテーブル要素にクエリを書き込みます。SQL Azureで一時テーブルを使用する
SET @query = N'SELECT STUDENT_ID, ROLL_NO, TITLE, STUDENT_NAME, EXAM_NAME, '+
@cols +
' INTO ##FINAL
FROM
(
SELECT *
FROM #AVERAGES
UNION
SELECT *
FROM #MARKS
UNION
SELECT *
FROM #GRACEMARKS
UNION
SELECT *
FROM #TOTAL
) p
PIVOT
(
MAX([MARKS])
FOR SUBJECT_ID IN
('+
@cols +')
) AS FINAL
ORDER BY STUDENT_ID ASC, DISPLAYORDER ASC, EXAM_NAME ASC;'
EXECUTE(@query)
select * from ##FINAL
このクエリはローカルデータベースで正しく機能しますが、SQL Azureではグローバルテンポラリテーブルが許可されていないため動作しません。
は今、私は私のローカルデータベースに#FINAL
から##FINA
Lを変更した場合、それは
無効なオブジェクト名として私にエラーを与える「#FINAL」。
どうすればこの問題を解決できますか?
SQLでうまくサポートされていないもの(可変数の列を持つ結果セット)を構築しようとしているので、特定の問題は解決しないと思います。一般的なケースでは、この作業をするためには、外側のスコープ(つまり、 'EXECUTE'の前)にtempテーブルを作成する必要がありますが、あなたが何カラムであるのか分からないときにはできません必要になる。 –
実際、私はそれを試してみました。私はtempを作成して、@に入っているカラム名を入れました。私はin節でそれを使うことができなかったので、それはどんな目的にも役立たない。つまり、FOR SUBJECT_ID IN (SELECT cast(subject_id AS NVARCHAR)FROM #SUBJECT_ID_TABLE) –
いいえ、ポイントは 'EXECUTE'の前に'#Final'テンポラリテーブルを作成することでした - これが両方のスコープでアクセスできる唯一の方法です。私は私の答えで働くかもしれない1つの方法を示しました。 –