我是存储过程的新手并且正在尝试学习。我有一个看起来像这样的数据库表,
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创建其他记录。
答案 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