次の例では、2 つのエラーが返されます。「列 '0.63' の定義には、データ型を含める必要があります。」'INSERT ステートメントの選択リストには、挿入リストより少ない項目が含まれています。SELECT 値の数は、INSERT 列の数と一致する必要があります。
一時テーブルに挿入される列にデータ型を割り当てる必要があることは理解していますが、動的コードでこれを行う方法がよくわかりません。正直なところ、 @cols 変数コードがどのように機能しているかについて説明が得られ、特定の問題を解決できれば、非常に役立ちます。fldPK はデータ型 INT で、ピボット フィールド (@cols) はすべて FLOAT データ型です。
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX);
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(fldCI)
from FN_qryT_1()
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT fldPK, ' + @cols + '
FROM
(
SELECT fldPK
,fldNI
,fldCI
FROM FN_qryT_1()
) as x
PIVOT
(
Sum(fldNI) FOR fldCI IN (' + @cols + ')
) as p
DECLARE @TPS TABLE
(
' + @cols + '
)
INSERT @TPS (' + @cols + ')
SELECT fldPK, [1], [2], [3], [4], [5]
FROM @TPS
WHERE ((([1])<10)) OR ((([2])<10)) OR ((([3])<10))'
exec sp_executesql @query