2016-07-10 182 views
0

我有一个动态的支点写成下面,我需要添加一个where条款动态支点where子句

DECLARE @cols AS NVARCHAR(MAX), 
@query AS NVARCHAR(MAX),@uniqId varchar(50); 

set @uniqId = 'IN0s3Z0n8z4v' 

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.DisplayLabel) 
     FROM [dbo].[CountyCaseUserData] c where UniqueEntryId = @uniqId 
     FOR XML PATH(''), TYPE 
     ).value('.', 'NVARCHAR(MAX)') 
    ,1,1,'') 

print @cols 
set @query = 'SELECT ' + @cols + ' 
from 
     (
      SELECT UserInput, DisplayLabel,row_number() 
         over (partition by DisplayLabel order by CCId) AS No 
      from [dbo].[CountyCaseUserData] where UniqueEntryId = @uniqId 
     ) x 
     pivot 
     (
      max(UserInput) 
      for DisplayLabel in (' + @cols + ') 
     ) p '; 


execute(@query) 

但在执行的时候,我得到一个消息

必须声明标量变量“ @uniqId“

我在这里错过了什么?

+2

首先声明'@ uniqid'然后是'这里UniqueEntryId = '' '+ @uniqId + ''') x'或使用'sp_executesql'作为参数传递。 –

+0

执行不知道变量。所以你需要将它添加到Les H建议的@query中。 – LukStorms

回答

1

为别人指出的那样,

变化execute(@query)

exec sp_executesql @query, N'@uniqId varchar(50)', @uniqId