从同一存储过程中选择所有行或特定行

Mar*_*rio 1 sql sql-server-2008

我使用以下存储过程

CREATE PROCEDURE [dbo].[GetStates]
(
    @p_StateId int = NULL
)
AS
   SELECT 
      StateId AS CodeID,
      StateName AS CodeName
   FROM 
      States
   WHERE 
      StateID = COALESCE(@p_StateID, StateID)
Run Code Online (Sandbox Code Playgroud)

如果@p_StateId为null,则返回所有行,否则返回单行(如果StateId匹配).

我的问题是,用SQL Server 2008做一个更优雅的方法来实现这个目的吗?

das*_*ght 5

明确的比较也NULL应该起作用:

SELECT StateId AS CodeID,
       StateName AS CodeName
FROM States
WHERE @p_StateID IS NULL OR StateID = @p_StateID
Run Code Online (Sandbox Code Playgroud)