我正在使用
SELECT MAX(CustomerID)...
选择CustomerID
,它是表的主键,是新添加的行的编号,因为我需要将此编号用于另一个使用它作为外键的表。通过INSERT
添加一行,并按顺序执行一次SELECT
查询。
在SQL Server Management Studio的列属性下,我看到Identity Increment
设置为1
。是否有不安全的理由使用MAX(CustomerID)
来获得我需要的东西?对于此过程,代码将始终为“一行INSERT和一个SELECT查询”。如果有更好的方法,会是什么?也许,沿着这条线的某个地方,“让我得到新添加的行的CustomerID
”?
答案 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