【问题标题】:SQL Server 2005 - T-SQL - How to generate int ID?SQL Server 2005 - T-SQL - 如何生成 int ID?
【发布时间】:2011-09-20 17:55:13
【问题描述】:

我遇到了 NEWID()。我认为将 INT 键 id-s 值插入到表中应该很有用,但它返回浮点数或对 ID 列值不太好的东西。所以我的问题是如何获取表插入的自动生成的 INT ID 值?

【问题讨论】:

  • 在插入行之前是否需要知道表的下一个 ID 值?使用@@IDENTITY插入一行后获取ID会不会不起作用(默认情况下SQL应该自动增加ID)?
  • newid() 生成一个 GUID。 msdn.microsoft.com/en-us/library/ms190348.aspx
  • 嗯,当然,我希望所有的 ID 值都不同,但在这里我不确定表应该有多大,所以我需要在整个插入生命周期中生成不同的数字。 . 怎么做?
  • @therealmitchconnors,您想使用 OUTPUT 子句返回标识值或 scope_identity() 而不是 @@identity,这将在某些条件下返回不正确的值。

标签: database sql-server-2005 tsql


【解决方案1】:

您使用IDENTITY 属性定义INT(或SMALLINT, TINYINT, BIGINT)类型的列:

CREATE TABLE dbo.YourTable( ID INT IDENTITY(1,1) ......

使用此设置,当向表中插入行时,SQL Server 将自动为您的表生成连续的 ID。

对于 INT 类型,从 1 开始,您可以获得超过 20 亿 行可能的行 - 这对于绝大多数情况来说应该绰绰有余。使用BIGINT,您得到大约 922 万亿(922 有 15 个零 - 922'0000 亿) - 对你来说足够了吗??

如果您使用从 1 开始的 INT IDENTITY,并且每秒插入一行,则需要 66.5 在你达到 20 亿的限制之前......

如果您使用从 1 开始的 BIGINT IDENTITY,并且您每秒插入一千行,那么您需要一个令人难以置信的 2.92 亿年才能达到 922 千万亿的限制......

MSDN Books Online 中阅读有关它的更多信息(包括所有选项)。

【讨论】:

  • 似乎是这样,但如果需要删除行怎么办?他们会复制吗?为什么 IDENTITY(1,1) 我的意思是 1,1 是某个时期还是什么?
  • 如果您删除一行,该 ID 将消失,并且将永远被回收。对于选项 - 阅读在线书籍;基本上,(1,1) 的意思是:从 1 开始,递增 1
  • 所以也是随机的,还是增量的?
  • @user592704:它稳定地递增 - 没有任何随机性。从 1 开始,以 1 递增(这是最常用的默认值)- 1、2、3、4.........等等
  • 但是是否可以使用一些标准函数将随机数插入 id 列?我的意思是“不可预测”的价值?不是增量,而是一些随机生成。代码?
【解决方案2】:
CREATE TABLE Test
(
T_Id int IDENTITY (1, 1) NOT NULL,
LastName varchar(255),
FirstName varchar(255),
)

如果您使用的是 SQL Server http://howtoideas.net/how-to-create-auto-increment-column-in-a-sql-server-table,这里是一个教程链接

【讨论】:

  • Emm... 这不是 MySQL 的东西吗?
猜你喜欢
  • 2010-10-13
  • 2011-07-10
  • 2011-07-02
  • 2010-09-07
  • 1970-01-01
  • 2012-03-05
  • 1970-01-01
  • 1970-01-01
  • 2010-09-12
相关资源
最近更新 更多