2016-07-10 13 views
0

ich eine dynamische Dreh wie unten geschrieben haben, ich brauche eine where Klausel hinzuzufügenDynamische Pivot-Klausel 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) 

Aber bei der Ausführung, ich eine Nachricht

erhalten muss die skalare Variable deklarieren " @uniqId "

Was fehlt mir hier?

+2

Erst declare '@ uniqid' dann entweder' wo UniqueEntryId = '' '+ @uniqId + ''') x' oder verwenden Sie 'sp_executesql', um als Parameter zu übergeben. –

+0

Das Ausführen kennt die Variablen nicht. Sie müssen es also zur @Query hinzufügen, wie es Les H vorgeschlagen hat. – LukStorms

Antwort

1

als das, was andere wiesen darauf hin,

Änderung execute(@query)

zu

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