存储过程中的条件排序

Kar*_*ski 3 sql t-sql sql-server stored-procedures sql-server-2008-r2

例如我有这个存储过程

Create Procedure sampleProcedure
AS
BEGIN 
Select EmpID, Name, Address, PhoneNumber From EmpTable
END
Run Code Online (Sandbox Code Playgroud)

现在,在我的应用程序中,我将如何执行此操作:例如,用户检查了 checkBox1,则上面的查询将为ORDER BY EmpIDelse,如果检查了 checkBox2,则查询将为ORDER BY Name。我必须创建两个过程吗?

Create Procedure sampleProcedure1
AS
BEGIN 
Select EmpID, Name, Address, PhoneNumber From EmpTable Order By EmpID
END
Create Procedure sampleProcedure2
AS
BEGIN 
Select EmpID, Name, Address, PhoneNumber From EmpTable Order By Name
END
Run Code Online (Sandbox Code Playgroud)

如果选中checkbox1,则将执行sampleProcedure1,否则如果选中checkbox2,则将执行sampleProcedure2?

Yuc*_*uck 5

为过程引入一个参数来指示排序顺序:

Create Procedure sampleProcedure1
  @orderByEmpId bit
AS
BEGIN 
  if (@orderByEmpId = 1)
    Select EmpID, Name, Address, PhoneNumber From EmpTable Order By EmpID
  else
    Select EmpID, Name, Address, PhoneNumber From EmpTable Order By Name
END
Run Code Online (Sandbox Code Playgroud)

您可以进一步细化为:

CREATE PROCEDURE sampleProcedure1
  @orderByEmpId Bit
AS BEGIN 
  SELECT
    EmpID, Name, Address, PhoneNumber
  FROM EmpTable
  ORDER BY CASE WHEN @orderByEmpId = 1 THEN EmpID ELSE Name END
END
Run Code Online (Sandbox Code Playgroud)