修改 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 表格下拉菜单更改单元格背景颜色而不是文本