修改 SQL 代码以选择下拉列表而不是常量文本

Posted

技术标签:

【中文标题】修改 SQL 代码以选择下拉列表而不是常量文本【英文标题】:Modifying SQL code to pick the Dropdown list instead of constant text 【发布时间】:2018-12-13 10:22:00 【问题描述】:

在下面的查询中,我想将“MyDivision_1”(MyDivision_1 是一个常量文本)重定向到下拉列表选择。

<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 where sDivision = ''MyDivision_1''
                                    )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)">
</asp:SqlDataSource>

上面的 SQL 查询是在一个 aspx 页面中(设计模式)。

任何建议都会非常有帮助。

【问题讨论】:

【参考方案1】:

您可以像这样在SELECT 查询中使用参数:

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

然后通过在下拉列表中设置PropertyName="SelectedValue",在SqlDataSource 中的SelectParameters 选项中使用带有ControlParameter 的参数名称:

<%-- Dropdownlist example --%>
<asp:DropDownList ID="DropDownList1" runat="server" ... />
    <asp:ListItem Text="SampleText" Value="SampleValue" />
    ...
</asp:DropDownList>

<%-- SqlDataSource --%>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
 ConnectionString="<%$ ConnectionStrings:dbFOConnectionString %>" 
 SelectCommand="..." ...>
     <SelectParameters>
         <asp:ControlParameter ControlID="DropDownList1"
              PropertyName="SelectedValue"
              Name="MyDivision_1"
              Type="String" />
     </SelectParameters>
</asp:SqlDataSource>

注意:ControlParameter中传入的类型必须与下拉列表的SelectedValue属性中定义的类型匹配。

相关问题:

How to assign DropDownList selected value to SqlDataSource?

【讨论】:

是的,这是可能的。只需将 SelectCommand 值复制并粘贴到任何具有所需参数值的 SQL 编辑器中,然后运行它。 您的回答帮助我实现了我的目标,但是当我将它与实际查询一起使用时它不起作用。您可以在以下链接中查看详细说明***.com/questions/53773944/… 如果您查看上面给出的链接,将非常有帮助,请分享您的宝贵建议。

以上是关于修改 SQL 代码以选择下拉列表而不是常量文本的主要内容,如果未能解决你的问题,请参考以下文章

从文本字段复制值以选择下拉列表[重复]

使用 Google 表格下拉菜单更改单元格背景颜色而不是文本

使用 innerhtml 显示下拉列表文本而不是值

在 ag 网格下拉列表中,如何在选择后显示名称并在保存集值而不是名称上显示。?

使用jQuery从下拉列表(选择框)中获取所选文本

如何在颤动中选择基于下拉项添加文本字段值