以下のコードをストアドプロシージャ(SQL Server 2008)に配置しています。パラメータの1つに複数の値を設定できるようにするために、コードは文字列に配置されています。私が抱えている問題は、SQL Server Management StudioでSQLをテストすると、文字列が有効な識別子ではないと表示され、double**を付けた行を指していることです。
何が間違っているのかわからないので、何かを見逃したのか、この種のクエリを動的に実行できるのかを尋ねたいと思います。後者が不可能な場合、この種のクエリにいくつかのパラメータをどのように渡すのでしょうか。
ありがとう
DECLARE @SQL AS VARCHAR(MAX)
SELECT @SQL = 'select Production_Site, [Target],[Action],[Fail]'
SELECT @SQL = @SQL + ' from'
SELECT @SQL = @SQL + ' ('
SELECT @SQL = @SQL + ' select Production_Site, value, Period, YEAR, week'
SELECT @SQL = @SQL + ' from t_Pqe_Grocery'
SELECT @SQL = @SQL + ' unpivot ('
SELECT @SQL = @SQL + ' value'
SELECT @SQL = @SQL + ' for col in (Grocery_Packaging_And_Coding, Grocery_Measurable,'
SELECT @SQL = @SQL + ' Grocery_Appearance, Grocery_Aroma,'
**SELECT @SQL = @SQL + ' Grocery_Flavour, Grocery_Texture)) unp'**
SELECT @SQL = @SQL + ' ) src '
SELECT @SQL = @SQL + ' pivot '
SELECT @SQL = @SQL + ' ('
SELECT @SQL = @SQL + ' count(value)'
SELECT @SQL = @SQL + ' for value in ([Target], [Action], [Fail])'
SELECT @SQL = @SQL + ' ) piv'
SELECT @SQL = @SQL + ' where Production_Site IN (' + @Site + ') AND YEAR = ' +
CONVERT(varchar(50), CONVERT(BIGINT, @Year)) + ' AND Period = ' +
CONVERT(varchar(50), CONVERT(BIGINT, @Period)) + ' and Week = ' +
CONVERT(varchar(50), CONVERT(BIGINT, @Week))
EXECUTE @SQL