如何将 auto_increment 键插入 SQL Server 表

新手上路,请多包涵

我想将行插入到具有唯一、非自动递增主键的表中。

是否有本机 SQL 函数来评估最后一个键并递增它,或者我必须分两步完成:

 key = select max(primary.key) + 1

INSERT INTO dbo.TABLE (primary.key, field1, fiels2) VALUES (KEY, value1, value2)

原文由 Ruben Teixeira 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 659
2 个回答

从您自始至终的评论来看,您在表上有一个不是标识列的主键。

如果您的 SQL Server 版本是 SQL 2012,您应该查看序列:http: //msdn.microsoft.com/en-us/library/ff878091.aspx

在其他版本中,您需要使用主键列的 IDENTITY 属性 (http://msdn.microsoft.com/en-us/library/aa933196(v=sql.80).aspx) 重新创建表,或者使用两步法。

如果您采用两步方法,则需要确保同时运行的插入不会最终使用相同的新值。最简单的方法是将选择和插入组合成一个值并使用可序列化的表提示:

 CREATE TABLE dbo.Tbl1(id INT PRIMARY KEY, val1 INT, val2 INT)

INSERT INTO dbo.Tbl1(id, val1, val2)
VALUES((SELECT ISNULL(MAX(id)+1,0) FROM dbo.Tbl1 WITH(SERIALIZABLE, UPDLOCK)), 42, 47);

SELECT * FROM dbo.Tbl1;

原文由 Sebastian Meine 发布,翻译遵循 CC BY-SA 3.0 许可协议

插入一条记录:

我这样做只是为了在具有非自动递增主键的表中插入一行:

 DECLARE @myKey int
SET @myKey = (SELECT  ISNULL(MAX(primaryKey),0) FROM dbo.myTable)

INSERT INTO dbo.myTABLE (primaryKey, field1, fiels2) VALUES (@myKey + 1, value1, value2)

插入多条记录:

在另一种情况下,我需要在一个表中复制多条记录。为此,我从 SELECT 的结果中使用了 INSERT。我的意图是从 myTable 中复制一些满足特定条件的记录。但是我需要弄清楚如何在不重复 ID 的情况下使用唯一的 PRIMARY KEY 复制表中的记录。这是我解决它的方法:

 DECLARE @myKey int
SET @myKey = (SELECT  ISNULL(MAX(primaryKey),0) FROM dbo.myTable)

INSERT INTO dbo.myTABLE (primaryKey, field1, fiels2)
SELECT
     (primaryKey + @myKey, value1, value2)
        FROM dbo.myTable
        WHERE value2 = especific_Condition

ID 中存在一些空白,但我强制执行唯一性 PRIMARY KEY。

原文由 Aprendiz 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进