0

次の例では、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
4

0 に答える 0