SQL Server: выбор номера первичного ключа для новой добавленной строки - PullRequest
1 голос
/ 20 августа 2011

Я сейчас использую

SELECT MAX(CustomerID)...

, чтобы выбрать CustomerID, который является первичным ключом таблицы, номер новой добавленной строки, потому что мне нужно использовать этот номер для другой таблицы, которая использует его в качестве внешнего ключа. Одна строка добавляется через INSERT, а один SELECT запрос выполняется последовательно.

В свойстве столбца в SQL Server Management Studio, я вижу, Identity Increment имеет значение 1. Есть ли небезопасная причина использовать MAX(CustomerID), чтобы получить то, что мне нужно? Код всегда будет «одной строкой INSERT и одним запросом SELECT» для этой процедуры. Если есть лучший способ, что бы это было? Может быть, где-нибудь вдоль строки, «принесите мне CustomerID недавно добавленной строки»?

1 Ответ

2 голосов
/ 20 августа 2011

Ваш предложенный подход с 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...