SQL 2005存储过程返回值或创建它(如果它不存在)

Cun*_*ers 1 sql stored-procedures

我遇到了存储过程的问题(SQL 2005).

我有一个叫tbrm_Tags两列的表,TagIDTagName.我想将TagName值传递给存储过程,然后我想:

  1. 检查是否Tagname存在以及是否确实返回TagID
  2. 如果Tagname不存在,我希望它插入表中并返回TagID.

这是我正在使用的存储过程:

  @TagID int = null,
  @TagName varchar(50)  

AS

DECLARE @returnValue int

  BEGIN
  IF EXISTS (SELECT * FROM tbrm_Tags WHERE TagName = @TagName)
  BEGIN

  SELECT

  TagID

  FROM tbrm_Tags

  WHERE TagName = @TagName

END
ELSE
BEGIN
IF NOT EXISTS (SELECT * FROM tbrm_Tags WHERE TagName = @TagName)

   INSERT INTO tbrm_Tags

  (
    TagName

  )
  VALUES
  (
    @TagName

      )

  SELECT @returnValue = @@IDENTITY

  END
  END

  RETURN @returnValue
Run Code Online (Sandbox Code Playgroud)

我不能让select语句返回TagIDTagname存在.

Mar*_*ell 9

注意:不要使用@@IDENTITY- 它受触发器的影响; 总是用SCOPE_IDENTITY()

我可能会这样做:

DECLARE @returnValue int

SELECT @returnValue = TagID
FROM tbrm_Tags
WHERE TagName = @TagName

IF @returnValue IS NULL
BEGIN
     INSERT tbrm_Tags(TagName)
     VALUES (@TagName)

     SET @returnValue = SCOPE_IDENTITY()
END

RETURN @returnValue
Run Code Online (Sandbox Code Playgroud)