2014-02-24 61 views
3

我在SQL Server中创建了一个名为“Employee”的表格,现在我想使用存储过程更新表格。如何使用SQL Server中的存储过程更新表格

该表具有emp_name,emp_codestatus列。假设该表有三条记录:最初,在存储过程中,我想使用select语句获取最后两条记录,并且必须将提取的记录'status设置为'Y'。

我写了一个存储过程,但它不影响原始表。请建议存储过程的查询。

这里是我所做的查询:

create procedure updtdemployee As 
    select e.Emp_name ,e.Circle 
    from employee e 
    where e.Emp_Code ='2501' or e.Emp_Code='2502' 

    begin 
    update employee set status='Y' where Emp_name = employee.Emp_name 
    end 
+0

您可以在'UPDATE'中执行'WHERE'。 – TTeeple

回答

8

你不需要选择的一部分,只是做了更新。

CREATE PROCEDURE updtdemployee 
     @employeeID INT 
    AS 
    BEGIN 
    UPDATE employee 
    SET status='Y' 
    WHERE Emp_Code = @employeeID 
    END 

如果你想这样做静态,你可以根据你的问题用这个

CREATE PROCEDURE updtdemployee  
     AS 
     BEGIN 
     UPDATE employee 
     SET status='Y' 
     WHERE Emp_Code = 2501 or Emp_Code = 2502 
     END 
+0

但我需要使用emp代码从表中获取两条记录,然后我必须在resp记录中进行更改。这是可能的 – user3096627

+0

我把你的模板,现在我更新了我的答案你的情况,但如果你总是有两个值,你可以添加另一个变量,并使用它,以及 –

2

“我要取最后两个记录:”如果这种情况应该只是一个曾经影响了最后的2记录,

CREATE PROCEDURE updtdemployee  
     AS 
     BEGIN 
     UPDATE employee 
     SET status='Y' 
     WHERE Emp_Code in (select top 2 Emp_Code from employee order by Emp_Code desc) 
     END 

我纯粹猜测你想要订购的方式,但这是你在找什么?

+0

例如我说,但我想取任何两个来自表格的行,我必须将状态更改为'Y' – user3096627

+0

是的,这一点将做到这一点,在这种情况下总是返回最后2条记录。你可能会想,现在我看它有点像'code' CREATE PROCEDURE updtdemployee改变它 AS BEGIN 更新员工 将状态设置=“Y” WHERE Emp_Code中(选择员工,其中前2 Emp_Code状态<>'Y'by Emp_Code desc) END'code' 这样它就不会试图更新它已经修改的记录吗? – Talspaugh27

+0

否则,如果你只是想借此在emp_codes修改'code' CREATE PROCEDURE updtdemployee @ empcode1 INT,@ empcode2 INT AS BEGIN 更新员工 将状态设置= 'Y' WHERE Emp_Code = @ empcode1或Emp_Code = @ empcode2 END 'code' – Talspaugh27

0

*尝试下面的代码

Create Procedure UpdateRecord (@emp_code int) 
as 
begin 
update employee set status= 'Y' 
where [email protected]_code 
end 

*执行如下

exec UpdateRecode 3 

3是你的emp_code。请根据您的要求更改。

相关问题