我遇到了存储过程的问题(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
我不能让select语句返回TagID
时Tagname
存在.
注意:不要使用@@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