Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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,我有一个场景,比如我想在表中插入一条记录,然后 通过获取最后插入的行Id来更新相同的记录,因此现在 问题是,如果另一个用户在第一个记录之前插入新记录 记录得到更新,所以根据我的场景,我得到最后一个 插入的行Id,在本例中,更新应用于最后一行 对于第一个问题,请提供任何解决方案。这是针对SQL Server的。 如果表中有标识列,则在插入后使用@@Identity变量或SCOPE\u Identity()函数获取插入行的标识值,然后在更新时使用Where子句中的标识字段 像这样的 INSERT I

我有一个场景,比如我想在表中插入一条记录,然后 通过获取最后插入的行Id来更新相同的记录,因此现在 问题是,如果另一个用户在第一个记录之前插入新记录 记录得到更新,所以根据我的场景,我得到最后一个 插入的行Id,在本例中,更新应用于最后一行
对于第一个问题,请提供任何解决方案。

这是针对SQL Server的。 如果表中有标识列,则在插入后使用
@@Identity
变量或
SCOPE\u Identity()
函数获取插入行的标识值,然后在更新时使用Where子句中的标识字段

像这样的

INSERT INTO MyTable(FullName)
VALUES('My Name')

SELECT @IdVal = SCOPE_IDENTITY()

UPDATE MyTable SET Phone='1234' WHERE IdCol = @IdVal

这是针对SQL Server的 如果表中有标识列,则在插入后使用
@@Identity
变量或
SCOPE\u Identity()
函数获取插入行的标识值,然后在更新时使用Where子句中的标识字段

像这样的

INSERT INTO MyTable(FullName)
VALUES('My Name')

SELECT @IdVal = SCOPE_IDENTITY()

UPDATE MyTable SET Phone='1234' WHERE IdCol = @IdVal

为什么上次插入的行Id不是特定的行Id(主键)?您是否需要专门针对最后一行?而不是先插入再更新,您不能简单地将更新的数据包含在初始插入中吗?不,根据我的需要,我必须在插入后更新它。您使用的是什么数据库?您应该只使用实际使用的数据库进行标记。为什么上次插入的行Id不是特定的行Id(主键)?您是否需要专门针对最后一行?而不是先插入再更新,您不能简单地将更新的数据包含在初始插入中吗?不,根据我的需要,我必须在插入后更新它。您使用的是什么数据库?您应该只使用实际使用的数据库进行标记。@jawed。不幸的是,如果您使用的是SQL Server,那么最好的方法是使用
OUTPUT
子句。这个答案不应该被否决。我不提供答案,因为这个问题有不兼容的数据库标记。@jawed。不幸的是,如果您使用的是SQL Server,那么最好的方法是使用
OUTPUT
子句。这个答案不应该被否决。我没有提供答案,因为这个问题有不兼容的数据库标签。