SQL Server - 如何在两个可能的SELECT语句之间切换

Mar*_*rks 1 sql select stored-procedures case-statement

我想在我的mssql存储过程中使用一个参数来在小的和详细的结果之间切换(出于可维护性,性能和网络负载的原因).

如果参数设置为1,我将获得所有列,否则只有一个或两个最重要的列.它的工作方式非常有限:

ALTER PROCEDURE [dbo].[GetAllUsers]
 @detail BIT
AS
 IF @detail = 1 SELECT UserName, Title, UserID FROM Users
 ELSE SELECT Username FROM Users
Run Code Online (Sandbox Code Playgroud)

但我想使用合并的WHEN子句.以下是我尝试过的,但这不起作用.

ALTER PROCEDURE [dbo].[GetAllUsers]
 @detail BIT
AS
 CASE @detail
    WHEN 1 THEN SELECT UserName, Title, UserID
    ELSE SELECT UserName END
    FROM Users
    WHERE UserID < 5
Run Code Online (Sandbox Code Playgroud)

有没有办法实现这样的事情?

Kla*_*sen 9

我认为让一个存储过程根据输入变量返回不同的记录类型是一种糟糕的API设计.我认为你应该创建两个存储过程,GetAllUsers并且GetAllUsersWithDetails.


Tom*_*ski 5

就个人而言,我会使用两种不同的存储过程.没有理由创建一个复杂的实现只是为了强制适合一个存储过程.