在我正在处理包含经典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
对我而言,这似乎是一个奇怪的工作。这样做有什么问题吗?
答案 0 :(得分:2)
问题正是它所说的:你不能在order by子句中使用变量。 使用这个简单的TSQL,你会得到同样的错误:
declare @x int
set @x=1
select * from SomeTable order by @x
但是情况......什么时候不使用变量,而是返回一个值,这就是它起作用的原因。