同样的问题已经被问到MySQL here,无论如何语法在SQL Server中不起作用。
我在这里粘贴了这个问题的样本(通过简化),因为它解释了我非常需要的东西。
DECLARE @t1 integer
SET @t1=0;
-- MyTable is a simple Table with 2 fields "MyID" and "MyValue"
insert into MyTable
SELECT @t1 := @t1+1, --this "should" work in MySQL
MyAnotherValue
FROM AnotherTable
有没有办法在SQL Server中实现相同的功能(不使用游标)?
注意:这是一次查询运行,它是一个维护查询,因此竞争条件和锁定不是问题。
答案 0 :(得分:3)
您可以使用Row_Number()
来实现此目的Insert Into dbo.AnotherTable (Col1, Col2)
Select Row_Number() Over(Order By SomeColumn),
SomeColumn
From dbo.YourTable
答案 1 :(得分:2)
即使你不止一次地运行它,这也会有效:
insert into MyTable(MyId, MyValue)
select (select isnull(max(MyId), 0) from MyTable) + -- avoid duplicated keys, if you repeat this insert again
row_number() over(order by MyAnotherValue),
MyAnotherValue
from AnotherTable
isnull()
函数涵盖MyTable
为空的情况