Ind*_*rek 8 t-sql sql-server select rows-affected
使用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
Run Code Online (Sandbox Code Playgroud)
所以SELECT和UPDATE应该是一样的.结果应该返回0行.但UPDATE影响的一行少于SELECT从DB获取的行:
(61行受影响)
(60排受影响)
(0行(s)受影响)
我在这里错过了什么?
我怀疑最可能的原因是您的示例中的 Table_a 有一行包含重复的 ID - 这种情况下,您的第一个连接中会出现额外的行select,但update只处理 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
Run Code Online (Sandbox Code Playgroud)