我有一个名为:
的表Delegates
此表有四个字段:
ID(Auto increment, Primary)
MemberNo, FromYr, ToYr
我正在插入此查询:
INSERT INTO Delegates ([MemNo],[FromYr],[ToYr]) values(@MemNo, @FromYr,@ToYr)
值来自用户输入。一个成员可以是任何一年的代表,这就是我允许他们按照自己的意愿输入的原因。但现在的问题是他们可以错误地在同一年插入一个成员超过2次。 请帮帮我,我现在可以做些什么?
答案 0 :(得分:17)
使用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]);
答案 1 :(得分: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)
答案 2 :(得分:2)
试试这个,(我还没有验证)
INSERT INTO Delegates ([MemNo],[FromYr],[ToYr]) values(@MemNo, @FromYr,@ToYr)
where @MemNo not in
(
SELECT MemNo FROM words WHERE FromYr = @FromYr
)
答案 3 :(得分:2)
只需在该列上添加唯一索引,然后插入重复项就会导致错误。如果需要优雅地失败,则可以对其进行错误处理
答案 4 :(得分:1)
创建一个存储过程,首先检查数据库中是否已包含这些值。如果他们不是你会做你的插入。如果他们完全忽略它
答案 5 :(得分:0)
您可以避免使用这一简单的一行代码插入重复项:
INSERT INTO Delegates (MemNo, FromYr, ToYr) SELECT @MemNo, @FromYr, @ToYr WHERE NOT EXISTS (SELECT 1 FROM Delegates d WHERE d.MemNo=@MemNo AND d.FromYr=@FromYr)
如果是高负载环境,其他命令可以在执行此命令时插入副本,则可以使用WITH(HOLDLOCK)
提示。