我有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>
答案 0 :(得分:3)
在courseid
和cpuuserid
列中添加唯一键约束。
如果您尝试插入欺骗行为,则会遭遇密钥违规。
除此之外,您可以在使用存储过程插入之前测试该值是否存在。
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。