SQL Server:为新添加的行选择主键号

时间:2011-08-19 23:20:54

标签: sql-server select identity

我正在使用

SELECT MAX(CustomerID)...

选择CustomerID,它是表的主键,是新添加的行的编号,因为我需要将此编号用于另一个使用它作为外键的表。通过INSERT添加一行,并按顺序执行一次SELECT查询。

在SQL Server Management Studio的列属性下,我看到Identity Increment设置为1。是否有不安全的理由使用MAX(CustomerID)来获得我需要的东西?对于此过程,代码将始终为“一行INSERT和一个SELECT查询”。如果有更好的方法,会是什么?也许,沿着这条线的某个地方,“让我得到新添加的行的CustomerID”?

1 个答案:

答案 0 :(得分:2)

使用MAX(CustomerID)的建议方法将在并发条件下失败(当表为空时)

使用SELECT SCOPE_IDENTITY()OUTPUT子句。以下两个例子

CREATE TABLE #Customers
(
CustomerID INT IDENTITY(1,1) PRIMARY KEY,
Name VARCHAR(50)
)

INSERT INTO #Customers
(Name) 
VALUES ('Customer 1')

SELECT SCOPE_IDENTITY()

INSERT INTO #Customers
(Name) 
OUTPUT inserted.CustomerID
VALUES ('Customer 1')


DROP TABLE #Customers