【问题标题】:scope identity in stored procedure存储过程中的范围标识
【发布时间】:2012-01-28 02:22:41
【问题描述】:

我有以下存储过程。

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) 插入到客户表中..

不确定语法

【问题讨论】:

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


    【解决方案1】:

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

    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())
    

    【讨论】:

      【解决方案2】:
      SELECT @last_id_inserted = SCOPE_IDENTITY()
      or
      SET @last_id_inserted = SCOPE_IDENTITY()
      

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

        • hmm..是它..我还有其他语法错误吗?!?我可以像这样一个接一个地执行语句吗?!?
        • @DmitryMakovetskiyd 是的,应该这样做。为什么,您还遇到其他错误?
        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-09-29
          • 2010-09-11
          • 1970-01-01
          • 1970-01-01
          • 2021-11-08
          • 2019-03-19
          相关资源
          最近更新 更多