2012-06-12 2 views
0

Я написал приведенную ниже хранимую процедуру для проверки дубликатов перед вставкой строки в таблицу.Вставьте инструкцию с CASE, чтобы избежать повторной вставки строки

Но я не могу написать свой оператор INSERT внутри CASE.

Как я могу написать хранимую процедуру для проверки значения @Ordername, а после этого, если она отсутствует, она должна быть вставлена ​​в базу данных.

 CREATE PROCEDURE [Test Procedure ] 
      (
      @section varchar(70), 
      @mark varchar(70), 
      @qty decimal(18,2), 
      @Weight decimal(18,2), 
      @dateupdateremark int, 
      @OrderName varchar(70) 
      ) 
      AS 
     BEGIN 
    SET NOCOUNT ON; 

     select case(@OrderName) 
     when (select OrderName from dbo.tbl_insertxmldetails 
     where(@OrderName) not in (select OrderName from tbl_insertxmldetails)) 

     then 
     insert into dbo.tbl_insertxmldetails 
     (Section, Mark, QTY,Weight,Dateupdateremark ,OrderName,SystemDate) 
     values 
     (@Section, @Mark, @QTY,@Weight, @Dateupdateremark,@OrderName,GETDATE()) 
     else 'File already Exists' 
end 

ответ

2

Использование Если не существует пункт вместо сазе, что позволит решить вашу проблему

CREATE PROCEDURE [Test Procedure ] 
      (
      @section varchar(70), 
      @mark varchar(70), 
      @qty decimal(18,2), 
      @Weight decimal(18,2), 
      @dateupdateremark int, 
      @OrderName varchar(70) 
      ) 
      AS 
     BEGIN 
    SET NOCOUNT ON; 


     if not exists (select OrderName from dbo.tbl_insertxmldetails 
     where(@OrderName) not in (select OrderName from tbl_insertxmldetails)) 

     Begin 

     insert into dbo.tbl_insertxmldetails 
     (Section, Mark, QTY,Weight,Dateupdateremark ,OrderName,SystemDate) 
     values 
     (@Section, @Mark, @QTY,@Weight, @Dateupdateremark,@OrderName,GETDATE()) 

     End 

     else 
      Select 'File already Exists' 
+1

Ваш 'else 'Файл уже существующий бит не имеет смысла в этом контексте. –

+0

да, вы правы, нужно использовать оператор «Файл уже существует» ... – Asif

+0

Ну, да, это скомпилировалось бы хотя бы. Хотя, если вы решите вернуть этот результат с помощью оператора SELECT, вам стоит подумать о добавлении другого SELECT сразу после 'INSERT', возвращая результат * успешной * вставки, чтобы сделать поведение хранимой процедуры более последовательным. Однако, если бы я был вами, я, вероятно, не вернул бы результат с помощью инструкции SELECT. Я могу использовать 'print 'File is Exists'' вместо' select' File уже Exists'' или просто 'RETURN 1' (или, возможно,' RETURN -1'). –

1

Там нет необходимости использовать NOT IN, вы можете просто сделать это таким образом

IF NOT EXISTS(select OrderName from dbo.tbl_insertxmldetails Where [email protected]) 
BEGIN 

    insert into dbo.tbl_insertxmldetails 
    (Section, Mark, QTY,Weight,Dateupdateremark ,OrderName,SystemDate) 
    values 
    (@Section, @Mark, @QTY,@Weight, @Dateupdateremark,@OrderName,GETDATE()) 
END 
    ELSE 
    'File already Exists' 
+1

Что должен делать 'ELSE 'File Is Exists''? Возможно, вы имели в виду 'ELSE PRINT 'File уже Exists''? –

+0

Это также разрешает повторную вставку –

+0

rama измените вашу логику как , если существует, тогда «Файл уже существует». Вставьте запись. – Asif

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