gpt4 book ai didi

sql-server - 只返回存储过程的最后一个选择结果

转载 作者:行者123 更新时间:2023-12-03 16:46:54 24 4
gpt4 key购买 nike

要求说:存储过程用于搜索数据,基于 5 个标识符。如果有完全匹配,则只返回完全匹配,如果没有,但对非空参数有完全匹配,只返回这些结果,否则返回任何 4 个非空参数的任何匹配......等等

我的(简化)代码如下所示:

create procedure xxxSearch @a nvarchar(80), @b nvarchar(80)...
as
begin
select whatever
from MyTable t
where ((@a is null and t.a is null) or (@a = t.a)) and
((@b is null and t.b is null) or (@b = t.b))...

if @@ROWCOUNT = 0
begin
select whatever
from MyTable t
where ((@a is null) or (@a = t.a)) and
((@b is null) or (@b = t.b))...
if @@ROWCOUNT = 0
begin
...
end
end
end

因此可以选择更多组结果,第一个是空的,我只需要最后一个。
我知道在应用程序端很容易获得最后一个结果集,但是我们所有的存储过程调用都通过一个框架,该框架期望第一个表中的重要结果,我并不急于更改它并测试所有现有的 SP。

有没有办法只返回存储过程的最后一个选择结果?
有没有更好的方法来完成这项任务?

最佳答案

使用表变量:

create procedure xxxSearch @a nvarchar(80), @b nvarchar(80)...
as
begin
DECLARE @res TABLE(...)
INSERT INTO @res(...)
select whatever
from MyTable t
where ((@a is null and t.a is null) or (@a = t.a)) and
((@b is null and t.b is null) or (@b = t.b))...

if @@ROWCOUNT = 0
begin
INSERT INTO @res(...)
select whatever
from MyTable t
where ((@a is null) or (@a = t.a)) and
((@b is null) or (@b = t.b))...
if @@ROWCOUNT = 0
begin
...
end
end
SELECT ... FROM @res
end

关于sql-server - 只返回存储过程的最后一个选择结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2867321/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com