Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.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,仅当受上一个UPDATE命令影响时才删除行_Sql_Delete Row - Fatal编程技术网

sql,仅当受上一个UPDATE命令影响时才删除行

sql,仅当受上一个UPDATE命令影响时才删除行,sql,delete-row,Sql,Delete Row,我只想更新1行(id),并且仅当状态为==to stat时更新 UPDATE link_list SET status=0 WHERE id=@id AND status=@stat; 现在我想删除所有行,但仅当上面的行受到影响时,如何将下面的行更改为仅当上面的行受到影响时删除 DELETE link_list WHERE linkId=@id; 您只能删除状态为0的行-不能直接说这是否在上次更新中 要删除状态为0的位置,请执行以下操作 DELETE link_list WHERE link

我只想更新1行(id),并且仅当状态为==to stat时更新

UPDATE link_list SET status=0 WHERE id=@id AND status=@stat;
现在我想删除所有行,但仅当上面的行受到影响时,如何将下面的行更改为仅当上面的行受到影响时删除

DELETE link_list WHERE linkId=@id;

您只能删除状态为0的行-不能直接说这是否在上次更新中

要删除状态为0的位置,请执行以下操作

DELETE link_list WHERE linkId=@id and statua = 0

您只能删除状态为0的行-不能直接说这是否在上次更新中

要删除状态为0的位置,请执行以下操作

DELETE link_list WHERE linkId=@id and statua = 0
什么数据库

在支持输出子句的数据库中(SQL Server、ORacle、我认为DB2)很容易:

另一个选项是使用带ON DELETE CASCADE的外键约束,让引擎为您执行删除操作。

什么数据库

在支持输出子句的数据库中(SQL Server、ORacle、我认为DB2)很容易:


另一种选择是使用带ON DELETE CASCADE的外键约束,让引擎为您执行删除操作。

我支持@Rahuls建议使用触发器的评论。还有另一种选择:

UPDATE link_list SET status=0, id=(@affectedid:=id) WHERE id=@id AND status=@stat;

DELETE link_list WHERE linkId = @affectedid;
如果没有匹配的行,
@affectedid
用户变量应该为NULL,因此
DELETE
将是一个禁止操作。但是如果您可能在给定会话中多次执行此操作,
@affectedid
的值可能会从早期更新中带入,因此明智的做法是将其显式设置为NULL


注意:我还没有测试过这个,所以要小心并彻底测试。

我支持@Rahuls建议使用触发器的评论。还有另一种选择:

UPDATE link_list SET status=0, id=(@affectedid:=id) WHERE id=@id AND status=@stat;

DELETE link_list WHERE linkId = @affectedid;
如果没有匹配的行,
@affectedid
用户变量应该为NULL,因此
DELETE
将是一个禁止操作。但是如果您可能在给定会话中多次执行此操作,
@affectedid
的值可能会从早期更新中带入,因此明智的做法是将其显式设置为NULL


注意:我没有对此进行测试,因此请小心并彻底测试。

您可以尝试检查
@@rowcount
,它提供受上一条语句影响的行数。

您可以尝试检查
@@rowcount
,它提供受上一条语句影响的行数。

使用更新后触发器,用你使用的RDBMS品牌来标记你的问题可能会有帮助。“sql”不指定品牌,只指定语言。使用更新触发器后,它可能会有帮助使用您使用的RDBMS品牌标记您的问题可能会有帮助。“sql”不指定品牌,只指定语言。
输出
受Oracle支持?我只看到了名为的功能返回:没错,我在Oracle中加入了输出语法。我认为返回可以以相同的方式使用。@Remus:Yep-通常使用相同的功能,使用不同的语法。
OUTPUT
受Oracle支持吗?我只看到了名为的功能返回:没错,我在Oracle中加入了输出语法。我认为返回可以以相同的方式使用。@Remus:Yep-通常,相同的功能使用不同的语法;SQL%ROWCOUNT(如果您使用的是Oracle)。这是假定SQL Server;SQL%ROWCOUNT(如果您正在使用Oracle)。