如果有人能告诉我如何在SQL Server 2008
中获取数据库表中的下一个免费可用行号,我将不胜感激?
我要做的是实现与Oracle
类似的内容,其中序列号为新行提供下一个数字。在互联网上搜索,我没有发现任何符合此类的内容,但我发现的是row_number()
。不幸的是,我无法在insert
声明中使其发挥作用。
答案 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不应该具有商业意义。