【问题标题】:How to get next ID upon INSERT?如何在 INSERT 时获得下一个 ID?
【发布时间】:2013-07-03 09:48:50
【问题描述】:

我想确保每次插入表时 ID 列都会增加。

我试过这个说法:

INSERT INTO Anlagenteil (ID, TaId, Subtype, Name)
VALUES                  (MAX(ID)+1, 0, 'BdAnlageteil', 'Barcodeleser0');

很遗憾,我收到此错误消息:

Msg 207, Level 16, State 1, Line 1
Invalid column name 'ID'.

【问题讨论】:

  • 如果您需要递增值,通常最好使用内置功能(在 SQL Server 中,这将是一个 IDENTITY 列)。考虑一下如果两个用户同时运行相同的代码,你的方法会发生什么。

标签: sql-server-2008 sql-insert


【解决方案1】:

像这样使用嵌套查询:

INSERT INTO Anlagenteil (ID, TaId, Subtype, Name)
VALUES ((SELECT ISNULL(MAX(ID) + 1, 1) FROM Anlagenteil), 0, 'BdAnlageteil', 'Barcodeleser0');

【讨论】:

    【解决方案2】:

    列名“ID”无效。

    这表明您根本没有 ID 列。

    您应该将此列添加到表中,并将其设置为自动递增,而不是自己编写逻辑来执行此操作。

    正如@Damien_The_Unbeliever 所指出的,如果两个人同时运行脚本,这可能会导致问题。

    ALTER TABLE Anlagenteil
    ADD ID INT IDENTITY(1,1)
    

    那么你的 SQL 语句可以是:

    INSERT INTO Anlagenteil (TaId, Subtype, Name)
    VALUES                  (0, 'BdAnlageteil', 'Barcodeleser0')
    

    并且会自动添加新的ID值。

    【讨论】:

    • ID 绝对是有效的列名。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-17
    • 1970-01-01
    • 2012-11-09
    • 1970-01-01
    相关资源
    最近更新 更多