[英]SQL query for update and insert data in table
我正在嘗試更新我的表,我想檢查是否有一條記錄,然后再不執行任何操作;如果它有所不同,它將對其進行更改;如果不存在,則插入新記錄,這是我的表字段:
id res-id req-id IsActive
-- ------ ------ --------
這是我的存儲過程:
@Res_id int,
@Opt_id int,
@IsActive int
AS
SET NOCOUNT ON
SET XACT_ABORT ON
BEGIN
IF EXISTS (SELECT * FROM [dbo].[res_opt_junc]
WHERE [Res_id]=@Res_id AND [Opt_id]=@Opt_id AND [IsActive]=1 AND @IsActive=1)
BEGIN
RETURN;
END;
ELSE IF EXISTS (SELECT * FROM [dbo].[res_opt_junc]
WHERE [Res_id]=@Res_id AND [Opt_id]=@Opt_id AND [IsActive]=0 AND @IsActive=1)
BEGIN
UPDATE [dbo].[res_opt_junc]
SET [Res_id] = @Res_id, [Opt_id] = @Opt_id, [IsActive] = @IsActive
WHERE [Res_id]=@Res_id AND [Opt_id]=@Opt_id AND [IsActive]=0 AND @IsActive=1
RETURN;
END;
ELSE IF EXISTS (SELECT * FROM [dbo].[res_opt_junc]
WHERE [Res_id]=@Res_id AND [Opt_id]=@Opt_id AND [IsActive]=1 AND @IsActive=0)
BEGIN
UPDATE [dbo].[res_opt_junc]
SET [Res_id] = @Res_id, [Opt_id] = @Opt_id, [IsActive] = @IsActive
WHERE [Res_id]=@Res_id AND [Opt_id]=@Opt_id AND [IsActive]=1 AND @IsActive=0
RETURN;
END;
ELSE IF NOT EXISTS (SELECT * FROM [dbo].[res_opt_junc]
WHERE [Res_id]=@Res_id AND [Opt_id]=@Opt_id)
BEGIN
INSERT INTO [dbo].[res_opt_junc] ([Res_id],[Opt_id],[IsActive])
VALUES (@Res_id , @Opt_id , @IsActive);
RETURN;
END;
END
我不知道為什么表中的數據重復了;
MERGE語句聽起來像是完成工作的工具。
例:
MERGE [dbo].[res_opt_junc] roj
USING (SELECT @Res_id AS Res_id, @Opt_id AS Opt_id, @IsActive AS IsActive) AS nv
ON roj.Res_id = nv.Res_id AND roj.Opt_id = nv.Opt_Id
WHEN MATCHED THEN
UPDATE SET roj.IsActive = nv.IsActive
WHEN NOT MATCHED THEN
INSERT (Res_id, Opt_id, IsActive) VALUES (nv.Res_id, nv.Opt_id, nv.IsActive)
;
當然,假設Res_id
和Opt_id
是主鍵的組件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.