Sql 重复记录
我面临着重复记录的问题;并发问题。我正在从数据库检索记录:Sql 重复记录,sql,sql-server,Sql,Sql Server,我面临着重复记录的问题;并发问题。我正在从数据库检索记录: SELECT TOP 1 certid, certiname FROM certificate WHERE issued = 0 AND year = 2011 检索记录后,我将使用一个过程将记录插入不同的表中 有多个表影响该原因。我还使用了SQL事务影响所有事务或无事务、提交或回滚。在此过程中,我还将更新证书 UPDATE certificate SET issued = 1 WHERE certid = @c
SELECT TOP 1 certid, certiname
FROM certificate
WHERE issued = 0
AND year = 2011
检索记录后,我将使用一个过程将记录插入不同的表中
有多个表影响该原因。我还使用了SQL事务影响所有事务或无事务、提交或回滚。在此过程中,我还将更新证书
UPDATE certificate
SET issued = 1
WHERE certid = @certid
但同一证书颁发了多个策略
如何避免此问题?如果您试图让并发进程在不重叠的情况下选择一行,则需要一些提示ROWLOCK、READPAST、UPDLOCK。更多信息请点击此处: 如果要在同一事务中选择/更新,请使用OUTPUT子句
UPDATE TOP (1) certificate WITH (ROWLOCK, READPAST, UPDLOCK)
SET issued = 1
OUTPUT INSERTED.certid, INSERTED.certiname
-- or OUTPUT INSERTED.certid, INSERTED.certiname INTO @SOmeTableVariable
WHERE issued = 0
AND year = 2011
如果存在,请从sysobjects中选择*,其中type='U'和name='Temp\U Table1' 开始 升降台温度表1 终止 去 从表1中选择*进入临时表1 去 截断表Temp_表1 去 使用IGNORE\u DUP\u键在Temp\u Table1id DESC上创建唯一索引unqT 去 插入临时表格1,从表格1中选择*按id顺序描述 去 截断表1 去
插入表1,从临时表1中选择*请更好地解释您想做什么。我有一个模糊的想法,你正在尝试,但这是很难/不可能遵循的。这个词是“记录”。这不是“录制”或“重新录制”thanx dude。。。您能告诉我如何将输出INSERTED.certid、INSERTED.certiname设置为局部变量吗?因为此语句总是在证书过期时更新top 1记录,所以此语句不会更新任何内容。。这就是我想将价值存储到本地的原因variable@AbrarAhmad:您需要加载一个表变量,然后从中选择或加入它。