2012-06-12 36 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