2012-06-12 125 views
0

我已經編寫了下面的存儲過程,用於在將行插入表之前檢查重複項。用CASE插入語句以避免重複行插入

但是我不能在CASE裏面寫下我的INSERT聲明。

我該如何編寫存儲過程來檢查@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

使用。如果不存在條款代替case語句,將解決你的問題

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語句返回結果,你應該考慮在INSERT之後加入另一個SELECT,返回* successful *插入的結果,以使存儲過程的行爲更加一致。但是,如果我是你,我可能不會用'SELECT'語句返回結果。我可以使用'print'文件已經存在''而不是'select'文件已經存在''或簡單地''返回1''(或者可能''返回-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'文件已經存在'應該這樣做?你可能是指'ELSE PRINT'文件已經存在'嗎? –

+0

它也允許重複插入 –

+0

rama將您的邏輯更改爲 如果存在,則'File already Exists'else插入記錄。 – Asif