【发布时间】:2015-09-21 02:17:59
【问题描述】:
由于某种原因,我无法声明要在以下动态列 SQL 代码中使用的 @wsDateFrom 和 @wsDateTo 变量。
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 你是什么意思?我应该在哪里放置“sp_executesql”调用?此外,我仍然需要像上面那样声明参数。
标签: sql-server-2005 pivot declare