【问题标题】:SQL. How to use ORDER BY clause while executing sp_executesql?SQL。如何在执行 sp_executesql 时使用 ORDER BY 子句?
【发布时间】:2015-04-30 05:51:34
【问题描述】:

我需要在执行sp_executesql时使用ORDER BY子句。

我尝试了以下方法,但没有成功:

1.

EXEC Sp_executesql @query + 'ORDER BY myChoice', N'@param1 TINYINT, @param2 NVARCHAR(60)', @param1, @param2

2.

EXEC Sp_executesql @query ORDER BY myChoice, N'@param1 TINYINT, @param2 NVARCHAR(60)', @param1, @param2

3.

EXEC Sp_executesql @query, N'@param1 TINYINT, @param2 NVARCHAR(60)', @param1, @param2 + 'ORDER BY myChoice'

你有想法吗?我的语法不正确。

【问题讨论】:

  • 为什么不在@query 中包含 ORDER BY?
  • 如果您的查询语法正确(我们无法知道,因为您没有提供),请尝试在您的第一次尝试中在 ORDER 之前添加一个空格:' ORDER BY...'
  • 在您的@query 中添加 order by 子句。
  • 正如其他人所说,如果语法正确,您应该能够只使用 ORDER BY。例如,以下查询可以正常工作。 declare @param1 int = 1 declare @query nvarchar(max) = N'select * from seUser order by username' exec sp_executesql @query, N'@param1 int', @param1 附加 @query + 'ORDER BY myChoice 并没有得到结果的事实让我认为查询最终看起来像这样 SELECT * FROM tableORDER BY myChoice
  • 很有可能你根本不需要使用动态 sql...你能分享一下你的 @Query 的内容吗?

标签: sql sql-server tsql dynamic sql-order-by


【解决方案1】:

您不能将ORDER BY 应用于 SP,但您可以捕获输出并将 ORDER BY 应用于该输出。这种事;

declare @results as table (col1 int, col2 int) 
insert into @results execute sp_executesql @query, N'@param1 tinyint, @param2 nvarchar(60)', @param1, @param2
select * from @results order by myChoice

您显然必须定义@results 表变量来反映您的数据结构。

【讨论】:

    【解决方案2】:

    sp_executesql 不允许正在执行的语句是表达式。它必须是常量或变量。不允许串联。

    一种解决方法是创建另一个变量来保存连接的字符串。

    declare @query2 nvarchar(1000)
    
    set @query2 = @query + N' order by mychoice'
    
    execute sp_executesql @query2, ....
    

    【讨论】:

      猜你喜欢
      • 2018-01-17
      • 2021-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多