当前位置:  开发笔记 > 后端 > 正文

你能在sql server预编译语句中参数化排序顺序吗?

如何解决《你能在sqlserver预编译语句中参数化排序顺序吗?》经验,为你挑选了1个好方法。

我有一个带有VB.Net前端的.Net Web系统,通过ADO.Net与SQL Server 2005后端通信.基本上,我想要做的是:

Dim command As SqlCommand = New SqlCommand("", connection)
command.CommandText = "SELECT * FROM someTable ORDER BY orderValue @SortOrder"
Dim sortParam As SqlParameter = New SqlParameter("@SortOrder", SqlDbType.varChar, 3)
sortParam.Value = "ASC"
command.Parameters.Add(sortParam)
command.Prepare()
reader = command.ExecuteReader()

排序顺序将通过查询字符串或其他类型传递.此代码抛出"@SortOrder'附近的语法错误.无法准备语句."

这是否可能,或者我有一些非常愚蠢的语法错误,我没有看到?

(而且,是的,客户端只运行.net 2.0,所以基于LINQ的解决方案无法正常工作.

谢谢,全部!

更新/回复:

嗯,这就是我的想法.感谢所有人的理智检查.(对于某些上下文,命令字符串当前是动态构建的,但我们正在以更准备的语句方向移动系统,这是我不知道的边缘情况之一.

再次感谢!



1> Stephen Wrig..:

不,那不行.

有两种可能性,我可以从头脑中想到你正在尝试做的事情:

    动态构建SQL字符串

    从查询中返回数据表,然后使用View进行排序.


再过6年左右的经验(加上SQL Server版本),我有办法实现这一目标.

DECLARE @SortByIdASC AS INT;
SET @SortByIdASC = 1;
WITH cte AS (
SELECT Id, Foo, Bar
      , ROW_NUMBER() OVER (ORDER BY Id ASC) AS IdSortAsc
      , ROW_NUMBER() OVER (ORDER BY Id DESC) AS IdSortDesc 
   FROM MyTable
)

SELECT Id, Foo, Bar
   FROM cte 
   ORDER BY CASE WHEN @SortByIdASC = 1 THEN IdSortAsc
                 WHEN @SortByIdASC = 2 THEN IdSortDesc 
                 ELSE ''
                 END 
           , Foo, Bar 

这也允许从给定的排序顺序中向上,向下或甚至排除该特定列.

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有