我有一个使用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)
。我建议解决这个问题,因为很少有人(如果有的话(的名字只有一个字符