0

我无法使用表转换数据的表变量。支持表变量

上运行时其给予以下错误: “必须声明标量变量@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,'[email protected]+' 
from(
SELECT PERSONID,PERSONNAME,BU,wfstatus,timeperiod 
FROM 
'[email protected]+') AS SOURCETABLE 
PIVOT 
(group by wfstatus 
FOR timeperiod 
IN('[email protected]+') 
) as pivorttable 
select personid,personname,bu,timeperiod,status from pivorttable' 

execute(@query); 

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

+0

你为什么用三种不同版本的SQL Server标记这个?如果2008+可以将只读表值参数传递给动态SQL。不过,只要使用本地的'#temp'表即可。这是会话范围,所以不应该导致任何并发问题。 –

回答

1

FROM'[email protected]试图向一个字符串添加一个表变量,它不会像表变量那样工作,而不是一个字符串。

既然你大概需要先填写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