Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.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 动态变量存储导致临时表和变量错误_Sql - Fatal编程技术网

Sql 动态变量存储导致临时表和变量错误

Sql 动态变量存储导致临时表和变量错误,sql,Sql,我有一个动态轴心,部分工作。当我不使用变量请求where子句,而只是使用特定的数字时,它就起作用了 我还希望能够将结果存储到临时表中 是否可以在动态透视中使用where子句变量,是否可以将结果保存到临时表中 这是我当前的查询,它不起作用 declare @CourseID int = 2 DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX) SET @cols = STUFF((SELECT distinct ',' +

我有一个动态轴心,部分工作。当我不使用变量请求where子句,而只是使用特定的数字时,它就起作用了

我还希望能够将结果存储到临时表中

是否可以在动态透视中使用where子句变量,是否可以将结果保存到临时表中

这是我当前的查询,它不起作用

declare @CourseID int = 2
DECLARE  
  @cols AS NVARCHAR(MAX),
  @query  AS NVARCHAR(MAX)

SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(UnitID) 
            FROM LMS_Unit_Status where CourseID = @CourseID
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT LearnerID, ' + @cols + ' from 
             (select LearnerID,UnitID,Completed from LMS_Unit_Status where CourseID = @CourseID) as s
            pivot 
            (
                min(Completed)
                for UnitID in (' + @cols + ')
            ) p' 
 execute(@query);

Msg 137, Level 15, State 2, Line 2
Must declare the scalar variable "@CourseID".

谢谢

如果@CurseID是变量,解析器应该知道它是变量而不是字符串

由于您不知道该表将有多少列,所以可以简单地使用SELECTINTO语句

set @query = 'SELECT LearnerID, ' + @cols + ' into tempTable from
             (select LearnerID,UnitID,Completed from LMS_Unit_Status where CourseID = ' + @CourseID + ') as s
            pivot 
            (
                min(Completed)
                for UnitID in (' + @cols + ')
            ) p
 select * from tempTable
 drop table tempTable' 
 execute(@query);

干杯

感谢@Arek-我尝试了这个方法,但当将nvarchar值“SELECT LearnerID,[CU2306]从SELECT LearnerID,UnitID,完成从LMS_Unit_状态,其中CourseID=”转换为数据类型int时,我收到消息Msg 245,级别16,状态1,第12行转换失败。