0

以下返回两个错误:“列 '0.63' 的定义必须包含数据类型。” 'INSERT 语句的选择列表包含的项目少于插入列表。SELECT 值的数量必须与 INSERT 列的数量相匹配。

我知道我需要为插入到我的临时表中的列分配数据类型但是我不太明白如何使用动态代码执行此操作。老实说,如果我能得到一些关于 @cols 变量代码如何工作的解释,然后帮助解决我的具体问题,那将有很大帮助。fldPK 是 INT 数据类型,而 Pivot 字段(即@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