如何获取MS SQL 2008中的下一行编号

时间:2011-10-19 18:46:36

标签: sql-server sql-server-2008-r2

如果有人能告诉我如何在SQL Server 2008中获取数据库表中的下一个免费可用行号,我将不胜感激?

我要做的是实现与Oracle类似的内容,其中序列号为新行提供下一个数字。在互联网上搜索,我没有发现任何符合此类的内容,但我发现的是row_number()。不幸的是,我无法在insert声明中使其发挥作用。

4 个答案:

答案 0 :(得分:2)

我认为你要找的是列的IDENTITY property。使用它允许SQL Server自动分配您正在调用的行号。

使用id作为IDENTITY列的快速示例:

DECLARE @MySampleTable TABLE (
    id INT IDENTITY(1,1) PRIMARY KEY,
    name VARCHAR(20)
);

INSERT INTO @MySampleTable
    (name)
    VALUES ('Andy5'), ('Joe');

SELECT id, name
    FROM @MySampleTable;

答案 1 :(得分:1)

DECLARE @newId int;
SET @newId = 0;

select @newId = max(id) + 1
from my_table;

insert into my_table
values(@newId, ...)

... more code ...

在交易中包含上述代码,你就可以了。

答案 2 :(得分:0)

你真的想要行号吗?或者你只是想找一个ID。

在这种情况下,查找标识列和sql server。 http://www.dotnetfunda.com/articles/article753-identity-columns-in-sql-server.aspx

或:http://www.sqlteam.com/article/autonumbering-identity-columns

在这些情况下,在insert语句中,您没有指定ID,而sql server会自动提供一个新的。

SUCCES

答案 3 :(得分:0)

创建表时必须设置标识字段。然后当你插入它时,你跳过该字段。插入类似于假设标识字段被称为table1id:

Insert table1 (field1,field2)
values('test','test2')

现在身份有一些限制。即使操作被回滚,它也会使用一个数字,或者如果删除记录,它将不会重复使用它,因此会有间隙。这不应该是重要的,因为代理id不应该具有商业意义。