Scope_identity正在提供null值



我有一个使用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列中插入null,列不允许null,插入失败

知道如何解决这个问题吗?感谢您的帮助。

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

如所有注释中所述,SCOPE_IDENTITY返回当前范围内生成的最后一个IDENTITY值的值。引用文件:

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

在您的过程中,没有先前的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)。我建议解决这个问题,因为很少有人(如果有的话(的名字只有一个字符

相关内容

  • 没有找到相关文章

最新更新