1
我已經簽出this和this,但我迷路了。如何使用PIVOT在SQL Server 2005的動態列中聲明變量
由於某些原因,我無法聲明@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的,並通過在 –
@MitchWheat PARAMS你什麼意思?我應該在哪裏放置「sp_executesql」調用?此外,我仍然必須聲明上述的參數。 – Fandango68