0

我已经编写了以下存储过程,用于在将行插入表之前检查重复项。

但我不能INSERTCASE.

我怎样才能编写存储过程来检查它的值@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
4

2 回答 2

2

使用 If not exists 子句代替 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'
于 2012-06-12T04:24:51.977 回答
1

不用用NOT IN,这样就可以了

 IF NOT EXISTS(select OrderName from dbo.tbl_insertxmldetails Where OrderName=@OrderName)
 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'
于 2012-06-12T04:36:15.480 回答