2015-04-10 7 views
-1

Сохраненная Процедура ниже используется для вставки/обновления базы данных SQLInsert/Update набор записей

ALTER PROCEDURE [dbo].[uspInsertorUpdate] 
@dp    char(32), 
@dv    char(32), 
@e_num   char(12), 
@mail   varchar(50), 
@emerg   char(32), 
@opt1   char(16), 
@stat   char(20), 
@e_id   char(35), 
@e_tit   varchar(64), 
@e_date   datetime 
AS 
BEGIN 
SET NOCOUNT ON; 
IF EXISTS (SELECT 1 FROM [dbo].[sampleemployee] WHERE e_id= @e_id) 
BEGIN 
UPDATE [dbo].[sampleemployee] 
    SET dp  = @dp, 
     dv  = @dv, 
     e_num = @e_num, 
     mail = @mail, 
     emerg = @emerg, 
     opt1 = @opt1, 
     stat = @stat, 
     e_tit = @e_tit, 
     e_date = @e_date 
WHERE e_id = @e_id 
END 
ELSE 
BEGIN 
INSERT INTO [dbo].[sampleemployee](dp, dv, e_num, mail, emerg, opt1, stat, e_id, e_tit, e_date) 
VALUES (@dp, @dv, @e_num, @mail, @emerg, @opt1, @stat, @e_id, @e_tit, @e_date); 
END 
END; 

Но это просто вставляет один row.But, я набор записей из базы данных Oracle, которые я должен вставить/update в зависимости от e_id в базе данных SQA. Не уверен, что нужно изменить.

+1

Конечно, только одна вставка. Здесь вы используете скалярные значения. Не совсем уверен, что вы пытаетесь сделать. –

+0

Также не указывайте 'IF EXISTS/UPDATE/ELSE/INSERT'. Достаточно (и еще одна операция) сказать «UPDATE/IF @@ ROWCOUNT = 0/INSERT». –

ответ

0

Условное выражение выглядит хорошо, но похоже, что @e_id не соответствует e_id. В таких случаях, я пишу простые заявления для целей отладки:

IF EXISTS (SELECT 1 FROM [dbo].[sampleemployee] where e_id = 'some known value') 
BEGIN 
PRINT 'YES' 
END 
ELSE 
BEGIN 
PRINT 'NO' 
END 

Может быть, это поможет указать на то, что вы с видом. Является ли @e_id точным соответствием для e_id, или у вас есть какая-то очистка?

Смежные вопросы