Cela peut avoir été posée, mais il est vraiment difficile de rechercher des termes qui limitent les résultats de recherche ...Sql Server INSERT problème de portée
Prenez l'extrait de code SQL suivant:
declare @source table (id int)
declare @target table(id int primary key, sourceId int)
set nocount on
insert into @target values (0,0)
insert into @source(id) values(1)
--insert into @source(id) values(2)
set nocount off
insert into @target select (select max(id)+1 from @target), s.id from @source s
select * from @target
Cette évidence exécute sans erreur, mais maintenant décommenter la deuxième ligne d'insertion et l'erreur suivante se produit:
Msg 2627, Level 14, State 1, Line 15
Violation of PRIMARY KEY constraint 'PK__#7DB3CB72__7EA7EFAB'. Cannot insert duplicate key in object '[email protected]'.
Je me rends compte que l'instruction d'insertion plus est probablement effectué contre un o instantané f la table @target (select max(id)+1 from @target)
retournera toujours une valeur de 1 - provoquant l'erreur de violation ci-dessus ...
Y a-t-il un moyen de contourner cela en dehors du recours au curseur?
+1. @Sean Si vous ne pouvez pas modifier la cible pour utiliser l'identité, cette solution devrait fonctionner pour vous. Assurez-vous simplement de ne pas exécuter plusieurs instructions en même temps. – kristof
@Brian - Si j'avais assez de réputation, je donnerais +1 à votre réponse. C'est précisément le type de réponse que j'espérais. Merci. – Sean