订购?在经典的asp风险

时间:2015-09-11 15:27:07

标签: asp-classic

在我正在处理包含经典asp的应用程序中。我抛出了这个错误:

  

由ORDER BY编号1标识的SELECT项包含一个变量,作为标识列位置的表达式的一部分。只有在引用列名的表达式进行排序时,才允许使用变量。

现在这是因为使用Order By ?,但如果我使用Order By Case when ? = ? then ? end则不会发生错误。

为此引入的特定参数数量添加参数。

.Parameters(k) = Session("ORDER1")          
dc.Item("ORDER1") = false
k = k + 1
.Parameters(k) = Session("ORDER1") 
k = k + 1
.Parameters(k) = Session("ORDER1") 
k = k + 1

对我而言,这似乎是一个奇怪的工作。这样做有什么问题吗?

1 个答案:

答案 0 :(得分:2)

问题正是它所说的:你不能在order by子句中使用变量。 使用这个简单的TSQL,你会得到同样的错误:

declare @x int
set @x=1
select * from SomeTable order by @x

但是情况......什么时候不使用变量,而是返回一个值,这就是它起作用的原因。