如何避免SQL中INSERT的重复值?

bar*_*san 9 sql sql-server-2008

我有一个名为的表:

Delegates
Run Code Online (Sandbox Code Playgroud)

该表有四个字段:

ID(Auto increment, Primary)
MemberNo, FromYr, ToYr
Run Code Online (Sandbox Code Playgroud)

我插入这个查询:

INSERT INTO Delegates ([MemNo],[FromYr],[ToYr]) values(@MemNo, @FromYr,@ToYr)
Run Code Online (Sandbox Code Playgroud)

值来自用户输入.一个成员可以是任何一年的代表,这就是我允许他们按照自己的意愿输入的原因.但现在问题是他们可以错误地在同一年插入一个成员超过2次.请帮帮我,我现在可以做些什么?

gbn*_*gbn 18

使用MERGE

MERGE INTO Delegates D
USING (values(@MemNo, @FromYr,@ToYr)) X ([MemNo],[FromYr],[ToYr])
ON (insert unique key join)
WHEN NOT MATCHED BY TARGET THEN
INSERT ([MemNo],[FromYr],[ToYr]))
VALUES (X.[MemNo],X.[FromYr],X.[ToYr]);
Run Code Online (Sandbox Code Playgroud)


gza*_*axx 5

在插入之前检查是否存在具有相同值的记录:

if not exists (select * from Delegates d where d.FromYr = @FromYr and d.MemNo = @MemNo)
    INSERT INTO Delegates ([MemNo],[FromYr],[ToYr]) values(@MemNo, @FromYr,@ToYr)
Run Code Online (Sandbox Code Playgroud)

  • 这将在高负载下失败 (4认同)