Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 重复记录_Sql_Sql Server - Fatal编程技术网

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:您需要加载一个表变量,然后从中选择或加入它。