Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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 server sql server游标比较_Sql Server_Cursor - Fatal编程技术网

Sql server sql server游标比较

Sql server sql server游标比较,sql-server,cursor,Sql Server,Cursor,我有两个游标,其中游标1具有表1中的select*,游标2具有表2中的select*。我需要比较两个游标,如果游标1中提取的行不等于游标2的提取行,那么我想从表2中删除该提取行。请帮助我如何执行此操作?为什么要使用游标执行此操作?如果我理解正确,您可以执行以下操作: DELETE B FROM table1 A INNER JOIN table2 B ON A.Id = B.Id WHERE A.column1 <> B.column1 OR A.column2 <> B

我有两个游标,其中游标1具有表1中的
select*
,游标2具有表2中的
select*。我需要比较两个游标,如果游标1中提取的行不等于游标2的提取行,那么我想从表2中删除该提取行。请帮助我如何执行此操作?

为什么要使用游标执行此操作?如果我理解正确,您可以执行以下操作:

DELETE B
FROM table1 A
INNER JOIN table2 B
ON A.Id = B.Id
WHERE A.column1 <> B.column1 OR A.column2 <> B.Column2 ....
删除B
来自表1 A
内连接表2b
在A.Id=B.Id上
其中A.column1 B.column1或A.column2 B.column2。。。。

或者类似的东西。

您可以使用
以外的方法来标识更改的行

;WITH DirtyRows AS
(
    SELECT * FROM [Table 1]
    EXCEPT
    SELECT * FROM [Table 2]
)
DELETE [Table 2]
WHERE EXISTS
(
    SELECT * FROM DirtyRows
    WHERE DirtyRows.Id = [Table 2].Id
)

严肃地说:摆脱光标!使用基于集合的操作(如