2010-12-29 6 views
0

Je veux créer un SP dans SQL 2008. Si une valeur est déjà présente dans la base de données, elle me renverra son Id sinon elle insérera la valeur et retournera l'Id de la nouvelle valeur insérée. Comment créer ce SP pour une tableSP pour Get ID ou Insert ID

Title { Id(int), Name(nvarchar(50) } 
+0

Est-ce que Id est une colonne d'identité? –

+0

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

Répondre

1

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.

0
CREATE PROCEDURE dbo.insertIfNew 

    (
    @outputID int Output, 
    @Id int, 
    @Name nvarchar(50) 
    ) 

AS 
BEGIN TRANSACTION 

SELECT Id FROM Title WHERE [email protected] 

IF @@ROWCOUNT=0 

BEGIN 

INSERT INTO Title (Name) 
VALUES  (@Name) 

SET @outputID=SCOPE_IDENTITY() 
END 

ELSE 
SET @[email protected] 

COMMIT TRANSACTION 

    RETURN