无法将变量传递给Razor网页的动态数据透视查询

时间:2015-11-27 09:22:10

标签: c# sql-server razor

我的动态数据透视查询如下

    var sql_ovrd = @"DECLARE @out VARCHAR(MAX)
                SELECT @out = COALESCE(@out+'],[' ,'') + Hospital_Name
                FROM Hospitals
                SELECT @out = '['+@out+ ']'

                DECLARE @sql varchar(1000)
                SET @sql = '
                SELECT * FROM        
                (
                    SELECT  OVRCATEGORY.OVRCATEGORY AS OVRCAT, OVRCATEGORY.OVRCATEGORY AS OVRCATEGORY, Hospitals.Hospital_Name AS Hospital, OVRREPORTED.OVRCatID,
                            MONTH(OVRREPORTED.DATERECEIVED) AS [Month], YEAR(OVRREPORTED.DATERECEIVED) AS [YEAR]
                    FROM    OVRREPORTED 
                            INNER JOIN OVRCategory ON OVRReported.OVRCatID = OVRCategory.OVRCatID
                            INNER JOIN Hospitals ON OVRReported.Hospital_ID = Hospitals.Hospital_ID
                    WHERE   ovrreported.cancel_id=0 AND MONTH(OVRREPORTED.DATERECEIVED) =@0 AND YEAR(OVRREPORTED.DATERECEIVED)=@1
                ) AS T 

                PIVOT (COUNT(OVRCAT) FOR Hospital IN ('+@out+')) AS P'
                EXEC (@sql)"; //
var ovrd_data = db.Query(sql_ovrd,3,2015);

这一直给我一个错误信息,“必须声明标量变量”@ 0“。我在做些傻事吗?

当我从Where子句中删除“AND MONTH(OVRREPORTED.DATERECEIVED)= @ 0和年份(OVRREPORTED.DATERECEIVED)= @ 1”时,我尝试创建的网格工作正常。此外,当我尝试直接在sql studio上执行“AND MONTH(OVRREPORTED.DATERECEIVED)= 3年(OVRREPORTED.DATERECEIVED)= 2015”时,它运行正常。

是否无法将变量从Web Pages Razor语法传递给动态查询?

1 个答案:

答案 0 :(得分:0)

要在动态SQL中将值传递给变量,您需要使用 sp_executesql sys存储过程,请参阅MSDN说明:enter link description here