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

时间:2015-02-27 13:36:51

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

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

我试过了,但没有成功:

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'

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

2 个答案:

答案 0 :(得分:5)

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

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

declare @query2 nvarchar(1000)

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

execute sp_executesql @query2, ....

答案 1 :(得分:2)

您无法将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表变量以反映您的数据结构。