-2

レコードがまだ挿入されていない場合に挿入を行う必要があるストアド プロシージャを作成しています。

このストアド プロシージャは、ユーザーが複数回実行できます。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
4

1 に答える 1

2

に追加した条件に問題があると思いますIF NOT EXISTS。具体的には、これらの条件は反対です。

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

それは常に偽になります。

于 2013-04-08T16:13:11.200 に答える