使用表变量进行透视

时间:2013-05-15 11:58:25

标签: sql-server sql-server-2008 sql-server-2005 sql-server-2008-r2 pivot

我无法使用数据透视表变量的数据。

它在运行时给出以下错误: “必须声明标量变量@reportData”

我试过如下所述

DECLARE @reportData TABLE
(
PERSONID NUMERIC(6,0),
personname VARCHAR(100),
bu VARCHAR(50),
timeperiod VARCHAR(100),
wfstatus VARCHAR(100)
)

我正在使用以下动态数据透视查询

declare @query nvarchar(max)
set @query=N'SELECT PERSONID,PERSONNAME,BU,wfstatus,'+@datelist+'
from(
SELECT PERSONID,PERSONNAME,BU,wfstatus,timeperiod
FROM
'+@reportData+') AS SOURCETABLE
PIVOT
(group by wfstatus 
FOR timeperiod
 IN('+@datelist+')
) as pivorttable
select personid,personname,bu,timeperiod,status from pivorttable'

execute(@query);

有人可以帮助我吗? 我只需要使用表变量来维护并发问题。!

1 个答案:

答案 0 :(得分:1)

FROM'+@reportData尝试将表变量添加到字符串中,该字符串不能用作表变量。

鉴于您可能首先需要填充reportData,您可以切换到显式创建的临时表

create table #reportData 
(
PERSONID NUMERIC(6,0)
...
)

或使用表格类型;

--run once
CREATE TYPE ReportDataType AS TABLE (
    PERSONID NUMERIC(6,0),
    personname VARCHAR(100)
)


declare @reportData ReportDataType
insert @reportData values 
    (111, 'bob'),
    (222, 'alice')

declare @query nvarchar(max) = N'select * from @T'

exec sp_executesql @query, N'@T ReportDataType readonly', @reportData