sql-server – 什么可能导致’受影响的行’不正确?
发布时间:2020-12-12 06:39:54 所属栏目:MsSql教程 来源:网络整理
导读:使用Microsoft SQL Server Management Studio 2008.我做了一个简单的事务: BEGIN TRANSELECT ko.ID,os.ID AS ID2FROM table_a AS koJOIN table_b AS os ON os.ID=ko.IDWHERE (ko.the_date IS NOT NULL AND os.the_date IS NULL);UPDATE table_b SET the_date
使用Microsoft SQL Server Management Studio 2008.我做了一个简单的事务:
BEGIN TRAN SELECT ko.ID,os.ID AS ID2 FROM table_a AS ko JOIN table_b AS os ON os.ID=ko.ID WHERE (ko.the_date IS NOT NULL AND os.the_date IS NULL); UPDATE table_b SET the_date=ko.the_date FROM table_a AS ko JOIN table_b AS os ON os.ID=ko.ID WHERE (ko.the_date IS NOT NULL AND os.the_date IS NULL); SELECT ko.ID,os.ID AS ID2 FROM table_a AS ko JOIN table_b AS os ON os.ID=ko.ID WHERE (ko.the_date IS NOT NULL AND os.the_date IS NULL); ROLLBACK 所以SELECT和UPDATE应该是一样的.结果应该返回0行.但UPDATE影响的一行少于SELECT从DB获取的行: (61行受影响) (60排受影响) (0行(s)受影响) 我在这里想念的是什么? 解决方法我怀疑最可能的原因是你的例子中的Table_a中有一行有重复的ID – 这种情况下你的第一个选择中的连接中会出现另一行,但更新只处理Table_b中的行,所以你的重复行无关紧要.这句话应该给你罪魁祸首:SELECT ko.ID FROM table_a AS ko JOIN table_b AS os ON os.ID=ko.ID WHERE (ko.the_date IS NOT NULL AND os.the_date IS NULL) GROUP BY ko.ID HAVING COUNT(*) > 1 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |