如何使用非自动增量ID执行insert语句?

时间:2011-07-18 08:43:34

标签: sql-server sql-server-2008 auto-increment

同样的问题已经被问到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中实现相同的功能(不使用游标)?

注意:这是一次查询运行,它是一个维护查询,因此竞争条件和锁定不是问题。

2 个答案:

答案 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为空的情况