存储过程中的scope_identity

时间:2011-12-26 17:31:03

标签: asp.net sql sql-server stored-procedures

我有以下存储过程。

ALTER PROCEDURE dbo.insert_movie

(
@first_name varchar(50),
@movie_name varchar(50),
@date date,
@last_id_inserted int,
@last_name varchar(50)
)

AS
INSERT INTO movies (movie_name,movie_date) VALUES (@movie_name,@date);

SELECT SCOPE_IDENTITY() AS scope;

INSERT INTO customer (first_name,last_name,movie_id) 
    VALUES (@first_name,@last_name,@last_id_inserted)

我想将范围变量插入@last_id_inserted。

基本上,我想将最后插入的id(movie_id)插入到customer表中。

不确定语法

4 个答案:

答案 0 :(得分:7)

您可以将函数的结果分配给变量。

SET @last_id_inserted = SCOPE_IDENTITY();

无需@last_id_inserted作为参数。将其声明为SP中的变量。

DECLARE @last_id_inserted int;
SET @last_id_inserted = SCOPE_IDENTITY();

或者您可以直接在insert语句中使用它。

INSERT INTO customer (first_name,last_name,movie_id) 
    VALUES (@first_name,@last_name,SCOPE_IDENTITY())

答案 1 :(得分:5)

SELECT @last_id_inserted = SCOPE_IDENTITY()
or
SET @last_id_inserted = SCOPE_IDENTITY()

答案 2 :(得分:2)

您需要在存储过程中声明变量并分配SCOPE_IDENTITY函数的值:

DECLARE @last_id_inserted int;    
SET @last_id_inserted = SCOPE_IDENTITY();

答案 3 :(得分:0)

我只想添加其他答案,您可以将OUTPUT子句(SQLServer 2005及更高版本)添加到INSERT,而不是使用SCOPE_IDENTITY