如果存储过程中不存在记录,则插入

时间:2013-04-08 16:04:41

标签: sql sql-server-2008 stored-procedures

我正在创建一个存储过程,如果尚未插入记录,则需要执行插入操作。

用户可以多次运行此存储过程。我正在使用SQL Server 2008

我的查询如下。它不会给出任何错误但也不会做任何事情。如果我删除了“如果不存在”并且仅使用“选择”进行简单插入,则第一次使用它,然后在记录存在时给出错误。

CREATE PROCEDURE LoadRecords
   @ADD_BY varchar(10)
  ,@YEAR varchar(4)
  ,@Inserted int OUTPUT

AS
BEGIN

DECLARE @OFF char(2)
DECLARE @Year char(4)
DECLARE @ID varchar(9)

set @Inserted =0

/*check if record exists or not */

IF NOT EXISTS(

Select F.OFF, (@YEAR ), F.ID, F.Form, @ADD_BY

from Table1 as F

Left Join Table2  R
ON F.ID = R.ID
and F.OFF = R.OFF
and F.Year = R.Year

where F.Year = (@Year -1 )

and @OFF= F.OFF
and @Year = F.Year
and @ID= F.ID
and @Form = F.Form
)
/*insert values if records do not exist */

INSERT INTO Table1 (
    OFF, YEAR, ID, Form ,ADD_BY)
Values(@OFF, @Year, @ID , @Form, @ADD_BY)   


SET @Inserted =@@ROWCOUNT

END
GO

1 个答案:

答案 0 :(得分:2)

我认为您在IF NOT EXISTS上添加的条件存在问题,特别是这些条件正好相反:

where F.Year = (@Year -1 )
and @Year = F.Year

这总是错误的。