用于插入或更新数据库的SQL Server存储过程

时间:2015-02-02 16:33:23

标签: sql sql-server database sql-server-2008 stored-procedures

我是存储过程的新手并且正在尝试学习。我有一个看起来像这样的数据库表,

 Acc   | Room |  ID | Name |  Email | Status |  Date  | Number 
=======+======+=====+======+========+========+========+========
(null) |  101 | 001 |  ABC | (null) |   EMP  | (null) | (null) 
(null) |  102 | 002 |  DEF | (null) |   TMP  | (null) | (null)   

我正在创建一个存储过程来根据ID插入或更新数据库中的数据。并非所有记录都有要插入或更新的数据。

CREATE PROCEDURE [dbo].[uspInsertorUpdate]
    @room char(35),
    @id char(12),
    @name varchar(64),
    @status varchar(50),
AS
BEGIN
    SET NOCOUNT ON;
    IF EXISTS (SELECT null FROM emp WHERE ID = @id)
    BEGIN
       UPDATE emp 
       SET Room = @room, ID = @id, Name = @name, Status = @status
       WHERE ID = @id
    END

    INSERT INTO emp (Room, ID, Name, Status)
    VALUES(@room, @id, @name, @status);
END

不确定这是否正确,是否会使用null创建其他记录。

1 个答案:

答案 0 :(得分:-1)

首先检查Id是否存在。如果它不存在那么它的插入除了更新。

存储过程的主体可以是:

BEGIN

declare @v_count int

select @v_count = count(ID) from emp
where ID = @id

if (@v_count = 0)
insert into emp (Room, ID, Name, Status)
values (@room, @id, @name, @status)

else
update emp
set Room = @room, Name = @name, Status = @status
where ID = @id

END