【发布时间】:2015-09-08 08:00:55
【问题描述】:
我正在尝试更新我的表,我想在它什么都不做之前检查是否有记录,如果它不同,它会更改它,如果它不存在插入新的,这是我的表字段:
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
我不知道为什么我的表中的数据重复了;
【问题讨论】:
-
什么版本的sql-server?你可以试试
MERGE。 -
如果你有重复,你错过了一个独特的约束。
标签: sql sql-server