2014-01-29 3 views
0

Я бы ожидал, что эти подсчеты совпадут, но они отключены несколькими записями. Что может быть причиной этого?Почему эти значения sql не совпадают

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 
+0

Возможно, '@ updatedCount' сообщает только те строки, которые были фактически изменены? Я имею в виду, если 'StadiumId' был' 3' до и '3' после, он не считается« обновленным ». –

ответ

2

SELECT COUNT (*) будет показывать количество строк в джойн t1 и t2.

@@ ROWCOUNT после UPDATE ... t1 JOIN t2 будет иметь количество строк, обновленных в t1.

Номера разные, потому что они подсчитывают разные вещи. Тривиальным объяснением является строка в t1, для которой есть два ряда, совпадающих в t2: COUNT (*) равен 2, счет UPDATE равен 1. QED.

0

Вместо этого попробуйте UPDATE

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

Это недопустимый синтаксис для SQL Server – Lamak

+0

@Lamak Вот [скрипка] (http://sqlfiddle.com/#!3/b541a/1), где приведенный выше синтаксис работает для SQL Server, и я его использовал , – user2989408

+0

Извините ?, Я не вижу, где синтаксис вашего ответа используется на этой скрипке. – Lamak

Смежные вопросы