如果记录已存在,则停止在表中插入

时间:2009-09-07 08:37:24

标签: sql sql-server tsql error-handling try-catch

我有sql server程序,请参阅下文。

ALTER PROCEDURE [dbo].[uspInsertDelegate]
(
    @CourseID int,
    @CPUserID int,
    @StatusID int,
    @CreateUser varchar(25)

)
AS
    SET NOCOUNT OFF;
INSERT INTO tblDelegate                      
(
    CourseID, 
    CPUserID, 
    StatusID, 
    CreateUser 

)
VALUES     
(
    @CourseID,
    @CPUserID,
    @StatusID,
    @CreateUser
)

RETURN

现在我不想插入表 tblDelegate ,如果插入 courseid cpuserid 对于表tblDelegate中的记录相同< / p>

3 个答案:

答案 0 :(得分:3)

courseidcpuuserid列中添加唯一键约束。

如果您尝试插入欺骗行为,则会遭遇密钥违规。

除此之外,您可以在使用存储过程插入之前测试该值是否存在。

BEGIN TRAN

SELECT 1 
FROM tblDelegate WITH (TABLOCK) 
WHERE CourseId=@CourseID 
      AND CPUserID=@CPUserId
IF @@rowcount = 0
BEGIN
--Record doesn't already exist
--Insert it
END

COMMIT

答案 1 :(得分:2)

首先进行测试。在SQL Server 2005中,您还可以TRY / CATCH忽略重复的错误。

IF NOT EXISTS (SELECT *
        FROM tblDelegate
        WHERE CourseID = @CourseID etc)
    INSERT INTO tblDelegate                      
    (
        CourseID, 
        CPUserID, 
        StatusID, 
        CreateUser 

    )
    VALUES     
    (
        @CourseID,
        @CPUserID,
        @StatusID,
        @CreateUser
    )

我可以问:你的意思是“设置NOCOUNT ON”吗?

答案 2 :(得分:1)

您使用的是哪个版本的SQL Server?如果您在2008年,请查看MERGE声明。

然后按照第一个答案中的指示使用IF NOT Exists Clause。