Scope_identity 给出空值?

我有使用 scope_identity() 的存储过程

Create table table1
    id int,name varchar,age int 
Create procedure details
    @id int,@name varchar,age int
    
    Select @old_id = id,@name =  name,@age = age
    from table1 
    where id = @id
    
    if @old_id is null
    begin
        insert into table1(id,name,age)
        Select scope_identity(),@name,@age
    end

我得到的错误:

id 列不能插入空值,列不允许空值,插入失败

知道如何解决这个问题吗?任何帮助表示赞赏。

bb09009 回答:Scope_identity 给出空值?

我将回答为什么你在这里得到一个NULL,尽管这个答案不太可能回答你真的 > 问;我当然不能回答这个问题,而且你从来没有告诉我们那个问题是什么。

如所有评论中所述,SCOPE_IDENTITY 返回在 current 范围内生成的最后一个 IDENTITY 值的值。引用 documentation

返回插入到同一范围内的标识列中的最后一个标识值。作用域是一个模块:存储过程、触发器、函数或批处理。因此,如果两个语句在同一个存储过程、函数或批处理中,则它们在同一范围内。

在您的程序中没有先验 INSERT,因此没有先验生成值,因此 SCOPE_IDENTITY 可以具有值 NULL。因此,这意味着 INSERT 语句失败,因为您的列 id(我认为它实际上是一个外键)不能是 NULL

使用 SCOPE_IDENTITY()正常 语句如下所示:

INSERT INTO dbo.SomeTable (SomeColumn) --SomeTable has a column with the IDENTITY property
VALUES(@SomeValue);

INSERT INTO dbo.AnotherTable(ForeignKey,AnotherColumn)
VALUES(SCOPE_IDENTITY(),@AnotherValue);

还要注意,您将列/参数 name 定义为 varchar(1)。我建议解决这个问题,因为很少有人,如果有的话,他们的名字只有一个字符。

本文链接:https://www.f2er.com/612245.html

大家都在问