SQL。执行sp_executesql时如何使用ORDER BY子句?

SQL. How to use ORDER BY clause while executing sp_executesql?

我需要在执行 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'

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

您不能将 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 table 变量来反映您的数据结构。

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

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

declare @query2 nvarchar(1000)

set @query2 = @query + N' order by mychoice'

execute sp_executesql @query2, ....