为什么这些sql计数不匹配

时间:2014-01-29 17:51:44

标签: sql sql-server

我希望这些计数能够匹配,但它们会被一些记录所取代。什么可能导致这种情况?

DECLARE @ExpectedCount INT = 0;
DECLARE @UpdatedCount INT = 0;

SELECT @ExpectedCount = COUNT(*)
FROM [dbo].[Table1] t
JOIN [dbo].[Table2] s ON s.IdColumn = t.IdColumn

UPDATE t
SET t.StadiumId = s.StadiumId
FROM [dbo].[Table1] t
JOIN [dbo].[Table2] s ON s.IdColumn = t.IdColumn    

SELECT @UpdatedCount = @@ROWCOUNT

PRINT @ExpectedCount
PRINT @UpdatedCount

2 个答案:

答案 0 :(得分:2)

SELECT COUNT(*)将显示t1和t2的JOIN中的行数。

在UPDATE之后

@@ ROWCOUNT ... t1 JOIN t2将在t1 中更新的行数。

数字不同,因为它们计算的是不同的东西。一个简单的解释是t1中的一行,t2中有两行匹配:COUNT(*)为2,UPDATE计数为1. QED。

答案 1 :(得分:0)

请尝试此UPDATE

UPDATE [dbo].[Table1]
SET StadiumId = s.StadiumId
FROM [dbo].[Table2] s 
WHERE s.IdColumn = [dbo].[Table1].IdColumn