【发布时间】:2011-10-19 18:46:36
【问题描述】:
如果有人能告诉我如何在SQL Server 2008 中获取数据库表中的下一个免费可用行号,我将不胜感激?
我想做的是实现类似于Oracle 的东西,其中序列号为新行提供下一个数字。搜索互联网,我没有找到任何与此匹配的内容,但我找到的是row_number()。不幸的是,我不能让它在 insert 语句中工作。
【问题讨论】:
标签: sql-server sql-server-2008-r2
如果有人能告诉我如何在SQL Server 2008 中获取数据库表中的下一个免费可用行号,我将不胜感激?
我想做的是实现类似于Oracle 的东西,其中序列号为新行提供下一个数字。搜索互联网,我没有找到任何与此匹配的内容,但我找到的是row_number()。不幸的是,我不能让它在 insert 语句中工作。
【问题讨论】:
标签: sql-server sql-server-2008-r2
我认为您正在寻找的是 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;
【讨论】:
DECLARE @newId int;
SET @newId = 0;
select @newId = max(id) + 1
from my_table;
insert into my_table
values(@newId, ...)
... more code ...
将上面的代码包装在一个事务中,你就可以开始了。
【讨论】:
您真的想要行号还是只是在寻找 ID。
在这种情况下,请查找标识列和 sql server。 http://www.dotnetfunda.com/articles/article753-identity-columns-in-sql-server.aspx
或:http://www.sqlteam.com/article/autonumbering-identity-columns
在这些情况下,在您的插入语句中,您没有指定 ID,sql server 会自动提供一个新的。
成功
【讨论】:
您必须在创建表时设置标识字段。然后,当您插入其中时,您会跳过该字段。插入类似于假设标识字段称为 table1id:
Insert table1 (field1,field2)
values('test','test2')
现在身份有一些限制。即使回滚操作或删除记录,它也会用完一个数字,它不会重新使用它,因此会有间隙。这应该不重要,因为代理 ID 无论如何都不应该具有商业意义。
【讨论】: