SP用于获取ID或插入ID

时间:2010-12-29 17:08:35

标签: sql-server

我想在SQL 2008中创建一个SP。如果某个值已存在于数据库中,它将返回其Id,否则它将插入该值并返回新插入值的Id。如何为表创建此SP

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

2 个答案:

答案 0 :(得分:1)

以下是一个示例,假设id列是标识列:

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

如果您测试如下:

declare @rc int
exec @rc = dbo.YourSp 'John'; select @rc
exec @rc = dbo.YourSp 'John'; select @rc
exec @rc = dbo.YourSp 'George'; select @rc

它将打印1, 1, 2。如果一致性不重要,则可以省略该过程中与事务相关的语句。

答案 1 :(得分:0)

CREATE PROCEDURE dbo.insertIfNew

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

AS
BEGIN TRANSACTION

SELECT Id FROM Title WHERE Id=@Id

IF @@ROWCOUNT=0

BEGIN

INSERT INTO Title (Name)
VALUES     (@Name)

SET @outputID=SCOPE_IDENTITY()
END

ELSE
SET @outputID=@Id   

COMMIT TRANSACTION  

    RETURN