动态Where子句 - 一些变量没有通过

时间:2012-03-20 17:45:04

标签: c# asp.net sql sqldatasource

我想知道以下情况是否有效?我遇到了麻烦。

我有一个带有类似查询的智能标记SQLDataSource:

    SELECT [col1], [col2], [col3] FROM [Table1] WHERE (@SubType = @SubID) ORDER BY [col1] ASC

无论我在何处或如何设置@SubType参数,它都不起作用,但如果我将查询更改为WHERE [col1] = @SubID(删除@SubType),它可以正常工作。

我可以将参数设置为字段名称,以便与我的查询进行比较吗?

2 个答案:

答案 0 :(得分:3)

这不是参数的工作原理。参数不是字符串替换。它们使用值,而不是数据库对象名称(列,表等)。

解决方案是首先使用所需的列(代码隐藏)组装SQL查询,然后设置参数的值。

答案 1 :(得分:2)

如果要动态替换WHERE子句中的项目,则需要查看使用Dynamic SQL,然后可以将SQL构建为字符串并执行它。

来自http://www.sommarskog.se/dynamic_sql.html的代码示例

DECLARE @sql nvarchar(2000)
SELECT @sql = 'SELECT O.OrderID, SUM(OD.UnitPrice * OD.Quantity)
               FROM   dbo.Orders O
               JOIN   dbo.[Order Details] OD ON O.OrderID = OD.OrderID
               WHERE  O.OrderDate BETWEEN @from AND @to
                 AND  EXISTS (SELECT *
                              FROM   dbo.[Order Details] OD2
                              WHERE  O.OrderID = OD2.OrderID
                                AND  OD2.ProductID = @prodid)
                GROUP  BY O.OrderID'
EXEC sp_executesql @sql, N'@from datetime, @to datetime, @prodid int',
                   '19980201', '19980228', 76

另一个有用的链接:

Dynamic WHERE Clause