我想将行插入具有唯一,非自动递增主键的表中。
是否有本机SQL函数来评估最后一个键并将其递增,还是我必须分两个步骤进行操作:
key = select max(primary.key) + 1 INSERT INTO dbo.TABLE (primary.key, field1, fiels2) VALUES (KEY, value1, value2)
从整个注释来看,您在表上有一个主键,而不是标识列。
如果您的SQL Server版本是SQL 2012,则应查看序列:http : //msdn.microsoft.com/zh- cn/library/ff878091.aspx
在其他版本中,您需要使用IDENTITY属性(http://msdn.microsoft.com/zh- cn/library/aa933196(v=sql.80).aspx)重新创建表,或者使用主键列来重新创建表。两步法。
如果采用两步法,则需要确保并发运行的插入最终不会使用相同的新值。最简单的方法是将select和insert组合为一个值,并使用可序列化的表提示:
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;