SQL Server:动态ORDER BY,如果输入param为NULL,请不要ORDER BY?

时间:2010-11-22 02:07:06

标签: sql sql-server stored-procedures sql-order-by

我正在尝试修改一个存储过程,我必须包含一个输入参数@OrderBy

但我需要测试一下,看它的NULL是否在ORDER BY SQL

中不包含SELECT

如果它为NOT null,那么我想在@OrderBy

上订购

这可能吗?

提前致谢

2 个答案:

答案 0 :(得分:6)

您可以使用动态SQL

来完成此任务
Declare @dynamicSQL nvarchar(5000);
Declare @orderBy nvarchar(50);

Set @orderBy = 'column1';

Set @dynamicSQL = 'Select * from Table ';

If (@orderBy IS NOT NULL) BEGIN
  @dynamicSQL = @dynamicSQL + 'Order BY ' + @orderBy;
END

exec @dynamicSQL;

答案 1 :(得分:0)

这样做的唯一方法就像你纯粹说的那样是使用动态SQL,但CASE语句通常也能正常工作:

SELECT *
FROM foo f
ORDER BY CASE WHEN @OrderBy IS NULL THEN f.Whatever ELSE '' END