我有一个动态数据透视表,它会在运行时生成未知数量的列。我试图从现有表中清除数据并将查询结果插入其中。我遇到的问题是我不知道表定义会提前是什么,因为它是动态的。
这是我得到的错误:
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)
答案 0 :(得分:3)
我会DROP
原始表格,只需使用SELECT INTO
子句动态创建新表格。
使用SELECT INTO
您不需要事先创建表格,也不用担心它将具有什么类型和列数。 SQL Server将为您创建它。
注意:这仅在表不存在时才有效。
关于INTO
条款http://technet.microsoft.com/en-us/library/ms188029.aspx
作为另一种选择,您可以始终SELECT INTO #temp
表格,您可以放弃或使用它来建模您的其他表格,但我认为这是您不想做的额外工作。
答案 1 :(得分:0)
您可以这样做:
let colorTop = UIColor.redColor().CGColor //your status bar color
let colorBottom = UIColor.whiteColor().CGColor//color for your navigation bar
let gradientLayer = CAGradientLayer()
gradientLayer.colors = [ colorTop, colorBottom]
gradientLayer.locations = [ 0.5, 0.5]
gradientLayer.frame = CGRectMake(0, -20, 375, 64)
self.navigationController?.navigationBar.layer.addSublayer(gradientLayer)