【问题标题】:Auto increment a bigint column?自动增加一个 bigint 列?
【发布时间】:2013-11-07 19:43:56
【问题描述】:

我想要插入到表中的每一行数据都有一个 bigint ID 列。我希望 Sql server 生成数字。我试图创建一个带有 bigint 列 ID 的表。我希望这是第一个值为 1 的自动增量。我尝试在我的 create table 语句中使用 [ID] [bigint] AUTO_INCREMENT NOT NULL,,但出现错误 - Incorrect syntax near 'AUTO_INCREMENT'. 我该怎么做?

【问题讨论】:

  • stackoverflow.com/questions/91628/… 可能会为您介绍此内容
  • @synthesizerpatel - 我想知道在 create 语句中是否可以做任何事情来获得我想要的东西。我暂时不能使用触发器。

标签: sql-server sql-server-2005


【解决方案1】:

你能不能把它声明为一个 IDENTITY 列:

[ID] [bigint] IDENTITY(1,1) NOT NULL;

1,1 指的是起始索引和它被递增的数量。

注意:在执行插入操作时,您不必为 ID 列提供值。它会自动选择它。如果需要,您可以稍后修改这些值。

编辑:

或者,您可以使用存储过程来处理所有插入。

示例:
存储过程将像普通插入一样接收变量(每列一个变量)。存储过程中的逻辑可以选择表中当前存在的最大值并将其选为最大值。

DECLARE @yourVariable = SELECT MAX(ID) FROM YourTable

使用@yourVariable 作为插入值。您可以根据需要递增或更改值。

【讨论】:

  • 对我来说没用。我已经尝试过了,但我无法在 ID 中插入 null。显然是因为我没有在那里插入任何东西。我只想插入其余的列,sql server 应该为我处理 ID 列。有道理吗?
  • 您是否需要将 NULL 值添加到您的插入中,因为您不希望在您正在执行的插入中存储一个 ID?还是仅仅因为您认为必须在该列中插入 null?
  • ImGreg - 我想要一个只有在将行添加到我的表时才会自动增加的列。它就像一个柜台。虽然我不需要,但如果我也可以在删除行时更改编号,那就太好了。
  • 我只问是因为如果您对插入 NULL 不感兴趣,Identity 列(主键)完全符合您的要求。每次插入时自动递增(自动地,您不应用值)。
  • 还有,看看我的回答。
【解决方案2】:

我在这里得到了答案 - http://www.sqlservercentral.com/Forums/Topic1512425-149-1.aspx

CREATE TABLE Test (
ID BIGINT IDENTITY NOT NULL,
SomeOtherColumn char(1)
)

INSERT INTO Test (SomeOtherColumn)
values ('a')

【讨论】:

  • 请注意,由于回滚和删除,您会有间隙。这不应该是一个问题,如果是,那么您需要手动计算值,并且避免竞争条件可能会很棘手。
  • @HLGEM - 感谢您的意见。我不是像你这样的 DBA 或专家。我还没有。你能解释一下那些东西是什么意思吗?为什么我有两个反对票?无论如何,这不是我的答案,正如第一行明确提到的那样。
  • 这可能是因为另一个答案提供了信息,并且看起来您发布此信息是为了获得代表。
  • @HLGEM - 太好了。我会赞成另一个答案并选择它。
  • 我投了赞成票。他的回答是准确的,并提供了一个类似问题的链接。代码只是一个示例,不需要复杂化一个基本问题。
猜你喜欢
  • 1970-01-01
  • 2015-03-19
  • 2018-11-21
  • 1970-01-01
  • 1970-01-01
  • 2014-04-13
  • 1970-01-01
  • 2015-05-09
  • 2018-06-05
相关资源
最近更新 更多