本文介绍了必须将标量变量"@ MyDivision_1"声明为的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这很好:

<asp:SqlDataSource ID="SqlDataSource1" runat="server"
     ConnectionString="<%$ ConnectionStrings:dbFOConnectionString %>"
     SelectCommand="SELECT sProductName,sDivision,sStockistName,Qty
                    FROM TblPresentStock
                    WHERE sDivision = @MyDivision_1 " >
     <SelectParameters>
         <asp:ControlParameter ControlID="ddlDivision"
              PropertyName="SelectedValue"
              Name="MyDivision_1"
              Type="String" />
     </SelectParameters>
</asp:SqlDataSource>

这也可以正常工作:

<asp:SqlDataSource ID="SqlDataSource1" runat="server"
     ConnectionString="<%$ ConnectionStrings:dbFOConnectionString %>"
     SelectCommand="/* COLUMNS HEADERS */
                DECLARE @columnHeaders NVARCHAR (MAX)

                SELECT @columnHeaders  = COALESCE (@columnHeaders
                       + ',[' + sStockistName + ']', '[' + sStockistName + ']')
                FROM   TblPresentStock
                GROUP BY sStockistName
                ORDER BY sStockistName

                /* GRAND TOTAL COLUMN */
                DECLARE @GrandTotalCol  NVARCHAR (MAX)
                SELECT @GrandTotalCol = COALESCE (@GrandTotalCol + 'ISNULL ([' +
                       CAST (sStockistName AS VARCHAR) +'],0) + ', 'ISNULL([' + CAST(sStockistName AS VARCHAR)+ '],0) + ')
                FROM TblPresentStock
                GROUP BY sStockistName
                ORDER BY sStockistName

                SET @GrandTotalCol = LEFT (@GrandTotalCol, LEN (@GrandTotalCol)-1)

                /* GRAND TOTAL ROW */
                DECLARE @GrandTotalRow  NVARCHAR(MAX)
                SELECT @GrandTotalRow = COALESCE(@GrandTotalRow + ',ISNULL(SUM([' +
                CAST(sStockistName AS VARCHAR)+']),0)', 'ISNULL(SUM([' + CAST(sStockistName AS VARCHAR)+']),0)')
                FROM     TblPresentStock
                    GROUP BY sStockistName
                  ORDER BY  sStockistName
                ----------------------------------------------

                 -- DROP TABLE  temp_MatchesTotal

                /* MAIN QUERY */
                DECLARE @FinalQuery NVARCHAR (MAX)
                SET @FinalQuery =   'SELECT *, (' + @GrandTotalCol + ')
                AS [Grand Total] INTO  #temp_MatchesTotal
                            FROM
                                (SELECT sProductName,sDivision,sStockistName,Qty
                                    FROM  TblPresentStock
                                )A
                            PIVOT
                                (
                                 sum (Qty)
                                 FOR sStockistName
                                 IN ('  +@columnHeaders +  ')
                                ) B

                ORDER BY sProductName,sDivision
                SELECT * FROM  #temp_MatchesTotal
                UNION ALL
                SELECT ''Grand Total'','''','+@GrandTotalRow +',
                ISNULL (SUM([Grand Total]),0) FROM  #temp_MatchesTotal
                  DROP TABLE  #temp_MatchesTotal'
                 -- PRINT 'Pivot Query '+@FinalQuery
                 -- SELECT @FinalQuery
                 EXECUTE(@FinalQuery)">
    <SelectParameters>
        <asp:ControlParameter ControlID="ddlDivision"
             PropertyName="SelectedValue"
             Name="MyDivision_1"
             Type="String" />
    </SelectParameters>
</asp:SqlDataSource>

在上面的查询中,当我替换此行时:

In the above query when I replace this line:

SELECT ProductName, sDivision, sStockistName, Qty
FROM TblPresentStock

与此:

SELECT sProductName, sDivision, sStockistName, Qty
FROM TblPresentStock
WHERE sDivision = @MyDivision_1

发生错误:

唯一的补充是

WHERE sDivision = @MyDivision_1

如果我像下面特别提到部门名称,那么它工作正常,并且可以正确获取该特定部门的数据.

If I mention the division name specifically like the below then it's working fine and getting the data of that particular division without any error.

WHERE sDivision = ''Div1''

推荐答案

我只需要替换

WHERE sDivision = @MyDivision_1

使用

WHERE sDivision = ''' + @MyDivision_1 + '''

这篇关于必须将标量变量"@ MyDivision_1"声明为的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-22 19:14