SQL SELECT和存储过程集成

时间:2012-11-22 17:22:12

标签: sql sql-server tsql

  

可能重复:
  SELECT FROM stored procedure?

如何以T-SQL语法包含存储过程?

select * from CITY_TABLE C where 
    COUNT_PEOPLE_PROCEDURE(C.ID) > 3

3 个答案:

答案 0 :(得分:3)

您不能将存储过程包含在此类查询中。

相反,你可以制作标量函数

create function COUNT_PEOPLE_FUNCTION
(
    @ID int
)
returns int
as
begin
    declare @Result int

    <... your code here ...>

    return @Result
end

然后

select * from CITY_TABLE C where COUNT_PEOPLE_FUNCTION(C.ID) > 3

但实际上,它可能会减慢您的查询速度,因为将为每一行独立调用标量函数。

答案 1 :(得分:1)

根据你的评论,如果你需要获得只有n次发生的记录,你可以使用这样的子查询:

SELECT * FROM CITY_TABLE WHERE IDPerson IN (
    SELECT IDPerson FROM CITY_TABLE GROUP BY IDPerson HAVING COUNT(*) > 3
)

显然我不知道确切的列名,但这就是主意。

答案 2 :(得分:0)

正如其他人已经说过你不能使用这样的存储过程,我建议你尽可能使用一个函数; 如果你不能使用一个功能(即使你可以)我建议你这个页面作为一个有用的阅读:

How to Share Data between Stored Procedures