Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 如何使用PIVOT在SQLServer2005的动态列中声明变量_Sql Server 2005_Pivot_Declare - Fatal编程技术网

Sql server 2005 如何使用PIVOT在SQLServer2005的动态列中声明变量

Sql server 2005 如何使用PIVOT在SQLServer2005的动态列中声明变量,sql-server-2005,pivot,declare,Sql Server 2005,Pivot,Declare,我已经退房了,但是我迷路了 由于某些原因,我无法声明要在以下动态列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 @wsDateT

我已经退房了,但是我迷路了

由于某些原因,我无法声明要在以下动态列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注入打开它,不是吗?

不,它不在那里。 试试这个:

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)

使用sp_executesql并传递参数in@MitchWheat你是什么意思?我应该在哪里调用“sp_executesql”?此外,我还必须像上面那样声明参数。