2012-12-19 52 views
5

这个查询是什么意思?这个SQL查询做了什么?请解释

@numberx = @numberx -1 
UPDATE th 
SET  @numberX= numberY= @numberX + 1 
FROM Table1 th 
INNER JOIN Table2 td ON th.Id = td.idth 
WHERE td.anything = @anything 

在第3行,这个“双等号”是什么? UPDATE上的“from”和“inner”是什么?

+3

你应该阅读[理解加入]这个优秀的文章(http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html) – Bartek

回答

8

这是一个多表更新,用于为Table1中的每一行分配连续的数字,其中Table2中的对应行对列anything具有特定值。

对于每个匹配行,它将列numberY设置为值@numberX + 1。它还将该值重新分配到@numberX,这会导致每行增加@numberX

这被称为“古怪的更新”。这是一个没有记录,也没有保证的方法来产生运行总数。应该使用SUM() OVER (ORDER BY ...)代替。

+0

那是一排逐行增量更新,或将所有numberY值收到相同的增量? (几乎用英语出来......) –

+0

这是否保证在SQL Server中工作?我没有看到为什么应该通过变量的存在序列化更新。 –

+0

@MarkByers - 什么RDBMS支持这个? –