【发布时间】:2016-05-23 13:52:41
【问题描述】:
正如标题所示,我正在尝试使用动态 SQL 来获取透视表的列名 - 但是,我也希望能够将参数传递给名为 @assessments 的变量,但我似乎无法让它工作。以下是我正在使用的代码,如果有人可以看一下并让我知道我哪里出错了,我将不胜感激。谢谢
create PROCEDURE [dbo].[spTestExamResults]
AS
BEGIN
DECLARE @SQL as NVARCHAR(MAX)
DECLARE @ColumnName as NVARCHAR(MAX)
DECLARE @assessment as NVARCHAR(50)
SET NOCOUNT ON;
--Get distinct values from pivot source
SELECT @ColumnName = ISNULL(@ColumnName + ',','') + QUOTENAME(subjectname)
From (SELECT DISTINCT SubjectName From qryPupilNCTest) as p order by p.Subjectname
SET @SQL =
'select pupil,PupilName, year' + @ColumnName + '
FROM qrypupilnctest
Where assessment in (' + @assessment + ')
PIVOT (MAX(grade) for subjectname in (' +@ColumnName + ')) piv'
EXEC (@SQL)
END
【问题讨论】:
-
什么不起作用?你有错误吗?结果不正确?
-
您希望
@assessment作为参数而不是局部变量?你的问题不清楚! -
按照编码,这将永远不会返回任何内容,因为您的评估变量尚未分配值,因此您的 sql 变量为 NULL。
标签: sql-server string parameter-passing dynamic-sql