【发布时间】:2014-02-22 00:13:22
【问题描述】:
我有一个动态数据透视表,它会在运行前生成未知数量的列。我正在尝试从现有表中清除数据并将查询结果插入其中。我遇到的问题是我不知道表定义会提前是什么,因为它是动态的。
这是我得到的错误:Msg 213, Level 16, State 7, Line 1
Column name or number of supplied values does not match table definition.
透视列是一个日期列,可以有 1 个日期或 1000 多个日期。 如何创建与我尝试插入的数据匹配的表定义?
这是我的查询:
DECLARE @colsPivot AS NVARCHAR(MAX),
@colsUnpivot AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @colsPivot = STUFF((SELECT ',' + QUOTENAME(rce.EcoDate)
from PhdRpt.RptCaseEco_542 AS rce
group by rce.EcoDate
order by rce.EcoDate
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
SELECT @colsUnpivot = stuff((SELECT ','+quotename(C.name)
FROM sys.columns AS C
WHERE C.object_id = object_id('PhdRpt.RptCaseEco_542') AND
C.name in ('NDCash', 'DCash')--LIKE '%Cash' or C.Name like 'NetGas'
FOR xml path('')), 1, 1, '')
set @query
= 'select *
--into ##hello
from
(
SELECT
ReportRunCaseId,
col,
EcoDate,
val
FROM PhdRpt.RptCaseEco_542
unpivot
(
val
for col in ('+ @colsunpivot +')
) u
) x1
pivot
(
max(val)
for EcoDate in ('+ @colspivot +')
) p'
truncate table dbo.Table1
insert into dbo.Table1
exec(@query)
【问题讨论】:
标签: sql sql-server exec truncate insert-into