加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读