使用where子句从另一个过程调用存储过程

时间:2017-08-20 17:55:27

标签: sql-server stored-procedures filter

我有一个包含此示例数据的表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

我该怎么办?

2 个答案:

答案 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';