存储过程与条件结果

Ada*_*gen 5 sql sql-server stored-procedures sql-server-2008

我想编写一个类似这样的存储过程:

SELECT * from T where T.A = @a and T.B = @b
Run Code Online (Sandbox Code Playgroud)

如果返回行,则返回这些行,否则返回

SELECT * from T where T.A = @a and T.B IS NULL
Run Code Online (Sandbox Code Playgroud)

编辑:

感觉应该有一种方法来创建一个过程,使其运行第一个查询一次,仅在必要时运行第二个查询.

结束编辑.

我能管理的最好的是跟随,它(理论上)运行第一个查询两次,除非缓存它:

IF EXISTS (SELECT * from T where T.A = @a and T.B = @b) THEN
    SELECT * from T where T.A = @a and T.B = @b
ELSE
    SELECT * from T where T.A = @a and T.B IS NULL
Run Code Online (Sandbox Code Playgroud)

值得一提的是,这是在Microsoft SQL Server 2008中

Mar*_*ith 5

这应该避免存在检查的附加表访问.我不确定是否有更简洁的方式.

SELECT * from T where T.A = @a and T.B = @b


IF (@@ROWCOUNT = 0)
BEGIN
    SELECT * from T where T.A = @a and T.B IS NULL
END
Run Code Online (Sandbox Code Playgroud)

  • 我认为这是表现最好的,但如果第一个结果是空的,你的应用程序必须查看第二个结果. (2认同)