J'utilise actuellement
SELECT MAX(CustomerID)...
pour sélectionner le CustomerID
, qui est la key primaire de la table, le numéro d'une ligne nouvellement ajoutée car j'ai besoin d'utiliser ce numéro pour une autre table qui l'utilise comme une key étrangère. Une ligne est ajoutée via INSERT
et une requête SELECT
est exécutée de manière séquentielle.
Sous la propriété de colonne dans SQL Server Management Studio, je vois que l' Identity Increment
est défini sur 1
. Existe-t-il une raison dangereuse d'utiliser MAX(CustomerID)
pour get ce dont j'ai besoin? Le code sera toujours "une ligne INSERT et une requêtes SELECT" pour cette procédure. S'il y a un meilleur moyen, qu'est-ce que ce serait? Peut-être, quelque part le long de la ligne, "obtenez-moi le CustomerID
de la ligne nouvellement ajouté"?
Votre approche suggérée avec MAX(CustomerID)
échouera dans des conditions de concurrency (et lorsque la table est vide)
utilisez SELECT SCOPE_IDENTITY()
ou la clause OUTPUT
. Exemples des deux ci-dessous
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