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

时间:2009-02-22 10:18:16

标签: sql stored-procedures

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

我有一个名为tbrm_Tags的表格,其中有两列TagIDTagName。我想将TagName值传递给存储过程,然后我想:

  1. 检查Tagname是否存在以及是否确实返回TagID
  2. 如果Tagname不存在,我希望它插入表格并返回TagID
  3. 这是我正在使用的存储过程:

      @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
    

    TagID存在时,我无法让select语句返回Tagname

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

SELECT

@returnValue = TagID

FROM tbrm_Tags

WHERE TagName = @TagName

答案 2 :(得分:0)

我怀疑Marc G.的代码可以正常工作,但我会像这样做最后一行:

SELECT @returnValue AS RETURNVALUE

我一直这样做,但我不确定这两种方法之间是否有任何功能差异......有谁知道?