我有一个包含此示例数据的表tblemployee
:
srno name Lastname
------------------------
1 Ibrahim shaikh
2 ibrahim mohammed
3 ibrahim khan
4 paul haymen
我有一个存储过程SPGetEmp
。当我执行这样的过程时:
SPGetEmp 'ibrahim',''
它返回此结果数据:
srno name Lastname
------------------------
1 Ibrahim shaikh
2 ibrahim mohammed
3 ibrahim khan
现在我想过滤来自另一个存储过程的数据,就像现在我想要使用姓氏过滤数据一样,例如'shaikh'
。
结果应该是:
srno name Lastname
-----------------------
1 Ibrahim shaikh
我该怎么办?
答案 0 :(得分:3)
您需要将结果插入临时表或变量,然后使用所需的SELECT
子句执行WHERE
查询。例如:
DECLARE @results TABLE(
srno int
, name nvarchar(30)
, Lastname nvarchar(30)
);
INSERT INTO @results
EXEC SPGetEmp 'ibrahim','';
SELECT srno, name, Lastname
FROM @results
WHERE Lastname = 'shaikh';
考虑将标准添加到SPGetEmp
过程中,因为如果经常执行该标准会更好。
答案 1 :(得分:0)
您无法过滤或加入存储过程的结果,因为它返回的内容不是表,即使您"请参阅"它作为一张桌子。
但是您可以将其重写为内联表值函数,然后您可以将其用作"参数化"查看,即您可以从中进行选择,过滤,加入,如下所示:
create function dbo.ufn_GetEmp (@name varchar(100))
returns table
as
return
(
select srno, name, Lastname
from tblemployee
where name = @name
);
go
select *
from dbo.ufn_GetEmp('ibrahim')
where lastname = 'shaikh';