我遇到了存储过程的问题(SQL 2005)。
我有一个名为tbrm_Tags
的表格,其中有两列TagID
和TagName
。我想将TagName
值传递给存储过程,然后我想:
Tagname
是否存在以及是否确实返回TagID
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
当TagID
存在时,我无法让select语句返回Tagname
。
答案 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
我一直这样做,但我不确定这两种方法之间是否有任何功能差异......有谁知道?