Voici un exemple, en supposant la colonne id est une colonne d'identité:
create table YourTable (id int identity, name nvarchar(50))
go
create procedure dbo.YourSp(
@name varchar(50))
as
declare @id int
set transaction isolation level serializable
begin transaction
select @id = id from dbo.YourTable where name = @name
if @id is null
begin
insert dbo.YourTable (name) values (@name)
set @id = scope_identity()
end
commit transaction
return @id
go
Si vous testez cela comme:
declare @rc int
exec @rc = dbo.YourSp 'John'; select @rc
exec @rc = dbo.YourSp 'John'; select @rc
exec @rc = dbo.YourSp 'George'; select @rc
Il sera imprimez 1, 1, 2
. Si la cohérence n'est pas si importante, vous pouvez omettre les instructions liées à la transaction de la procédure.
Est-ce que Id est une colonne d'identité? –
Pourquoi voulez-vous faire cela? Si vous envoyez une valeur d'identifiant connue, ne savez-vous pas qu'il existe déjà un enregistrement? – HLGEM