我想将行插入到具有唯一、非自动递增主键的表中。
是否有本机 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 许可协议
我想将行插入到具有唯一、非自动递增主键的表中。
是否有本机 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 许可协议
插入一条记录:
我这样做只是为了在具有非自动递增主键的表中插入一行:
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 许可协议
从您自始至终的评论来看,您在表上有一个不是标识列的主键。
如果您的 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) 重新创建表,或者使用两步法。
如果您采用两步方法,则需要确保同时运行的插入不会最终使用相同的新值。最简单的方法是将选择和插入组合成一个值并使用可序列化的表提示: