如何在 Exec 存储过程中使用 Where 子句

How to use Where Clause in Exec Stored Procedure

我有一个存储过程

Table结构:

CREATE TABLE employee(
    id          INTEGER NOT NULL PRIMARY KEY,
    first_name  VARCHAR(10),
    last_name   VARCHAR(10),
    salary      DECIMAL(10,2),
    city        VARCHAR(20),   
)

向员工添加一些数据Table:

INSERT INTO employee VALUES (1, 'Karvendhan',  'Palani',4789,'Agra');
GO

INSERT INTO employee VALUES (2, 'Bala',  'Manigandan',8789,'Bombay');
GO

INSERT INTO employee VALUES (3, 'Raj' ,  'Kishore',   5567,'London');
GO

INSERT INTO employee VALUES (4, 'Prayag',  'Pavithran',  4467,'Bombay');
GO

INSERT INTO employee VALUES (5, 'Selva',  'Kumar',  3456, 'Bombay');
GO

select * from employee;

我的存储过程:

CREATE PROCEDURE GetEmployeeBasedOnCity
(
    @city VARCHAR(20)
)

AS
BEGIN
    select * from employee where city = @city
END;

我正在执行存储过程:exec GetEmployeeBasedOnCity 'Bombay';

我得到输出:

id      first_name       last_name        salary          city
-----------------------------------------------------------------
2       Bala             Manigandan       8789.00        Bombay
4       Prayag           Pavithran        4467.00        Bombay
5       Selva            Kumar            3456.00        Bombay

我需要在 exec GetEmployeeBasedOnCity 'Bombay'; 时放置 where 子句 不在存储过程中。请帮助我...

Imagine the Query (Rough Expectation)

exec GetEmployeeBasedOnCity 'Bombay' WHERE salary >5000

最好的方法是独立于存储过程执行所需的查询。但是,如果您必须不加更改地使用现有存储过程,则可以将 proc 结果插入到临时 table 中,然后在该 table:

上应用其他过滤器
CREATE TABLE #employee(
    id          INTEGER NOT NULL PRIMARY KEY,
    first_name  VARCHAR(10),
    last_name   VARCHAR(10),
    salary      DECIMAL(10,2),
    city        VARCHAR(20),   
);

INSERT INTO #employee
    EXEC GetEmployeeBasedOnCity 'Bombay';

SELECT *
FROM #employee
WHERE salary > 5000;