我想知道以下情况是否有效?我遇到了麻烦。
我有一个带有类似查询的智能标记SQLDataSource:
SELECT [col1], [col2], [col3] FROM [Table1] WHERE (@SubType = @SubID) ORDER BY [col1] ASC
无论我在何处或如何设置@SubType参数,它都不起作用,但如果我将查询更改为WHERE [col1] = @SubID
(删除@SubType),它可以正常工作。
我可以将参数设置为字段名称,以便与我的查询进行比较吗?
答案 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
另一个有用的链接: