-2
我正在創建一個存儲過程,如果尚未插入記錄,則需要執行插入操作。如果存儲過程中不存在記錄,則插入
此存儲過程可以由用戶多次運行。我正在使用SQL Server 2008
我的查詢如下。它不會給出任何錯誤,但也不會做任何事情。如果我刪除了If不存在,並且只用一個簡單的插入操作,它將首次運行,然後在記錄已經存在時給出一個錯誤。
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 [email protected]@ROWCOUNT
END
GO
** OK **。你已經是SO成員2年了,並且提出了105個問題,而**從來沒有**真正困擾過你自己的格式。你需要學習如何使用編輯器,並停止依靠其他人來解決你的問題。 – meagar 2013-04-08 16:06:07
爲什麼不在沒有檢查的情況下執行'INSERT',如果失敗則是'CATCH'主鍵衝突?如果您希望大多數插入操作能夠成功,那麼這會更容易一些,並且避免了代碼中的併發問題,即另一個會話可能會在您的會話「SELECT」之後但在「INSERT」之前「插入」相同的值。 – Pondlife 2013-04-08 16:49:49