Я проверил this и this, но я потерян.Как объявить переменные в динамических столбцах в SQL Server 2005 с использованием PIVOT
По какой-то причине я не могу объявить переменные @wsDateFrom & @wsDateTo, которые будут использоваться в следующем динамическом столбце SQL-кода.
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
DECLARE @wsDateFrom AS smalldatetime
DECLARE @wsDateTo AS smalldatetime
SET @wsDateFrom = '01-JAN-2015'
SET @wsDateTo = '30-JUN-2015'
select @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(a.AbsenceDescription)
FROM dbo.tblAbsentCodes AS a
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),1,1,'')
set @query = N'SELECT StudentID, ' + @cols +
'FROM (SELECT a.StudentID, ab.AbsenceDescription, a.AttendanceID
FROM dbo.tblAttendance AS a
INNER JOIN tblCalendar c
ON a.DateID = c.DateID
INNER JOIN tblAbsentCodes as ab
ON ab.AbsenceID = a.AbsenceID
WHERE c.DayDate BETWEEN @wsDateFrom AND @wsDateTo) AS p
PIVOT (COUNT(AttendanceID) FOR AbsenceDescription IN (' + @cols + ')) AS pvt '
execute(@query)
Ошибка я получаю
Необходимо объявить скалярную переменную "@wsDateFrom".
Но оно есть! Или я должен как-то помещать DECLARE внутри @query?
Если это так, то как бы передать эти две переменные даты в функции или хранимой процедуре? Это откроет его для SQL-инъекции, не так ли?
использование sp_executesql и передать Params в –
@MitchWheat Как вы имеете в виду? Где я должен поместить вызов «sp_executesql»? Кроме того, мне все равно придется ЗАПИСАТЬ параметры, как я делаю выше. – Fandango68