我想在SQL 2008中创建一个SP。如果某个值已存在于数据库中,它将返回其Id,否则它将插入该值并返回新插入值的Id。如何为表创建此SP
Title { Id(int), Name(nvarchar(50) }
答案 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