gpt4 book ai didi

sql-server - 您可以在 sql server 准备好的语句中参数化排序顺序吗?

转载 作者:行者123 更新时间:2023-12-01 22:59:30 25 4
gpt4 key购买 nike

我有一个带有 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 的解决方案将不起作用。

谢谢大家!

更新/回复:

嗯,我就是这么想的。谢谢大家的健全检查。 (对于某些上下文,当前正在动态构建命令字符串,但我们正在将系统朝着更准备好的语句方向移动,这是我不知道可能发生的边缘情况之一。

再次感谢!

最佳答案

不,那行不通。

我可以立即想到两种可能性来做你想做的事情:

  • 动态构建 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

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

    关于sql-server - 您可以在 sql server 准备好的语句中参数化排序顺序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/467034/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com