当您将记录插入到具有标识列的表中时,可以使用 SCOPE_IDENTITY() 来获取该值。在存储过程的上下文中,这将是返回标识值的推荐方法:
- 作为输出参数
SET @RETURN_VALUE = SCOPE_IDENTITY()
- 作为标量
SELECT SCOPE_IDENTITY()
- 其他方式?
各有什么优点/缺点?
另一种选择是作为存储过程的返回值(不过我不建议这样做,因为这通常最适合错误值)。
当存储过程被其他 SQL 过程和无法使用 OUTPUT 参数(我相信 .NET 中的 IBATIS)使用的前端使用时,我将其插入单行:
CREATE PROCEDURE My_Insert
@col1 VARCHAR(20),
@new_identity INT OUTPUT
AS
BEGIN
SET NOCOUNT ON
INSERT INTO My_Table (col1)
VALUES (@col1)
SELECT @new_identity = SCOPE_IDENTITY()
SELECT @new_identity AS id
RETURN
END
当从其他存储过程调用时,输出参数在 T-SQL 中更容易使用(IMO),但某些编程语言对输出参数的支持很差或不支持,并且可以更好地处理结果集。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)