Scope_identity 给出空值?
Scope_identity is giving null values?
我有使用 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
我得到的错误:
cannot insert null into id column, column does not allow null, insert fail
知道如何解决这个问题吗?感谢任何帮助。
我将在这里回答 为什么 你会得到一个 NULL
,尽管这个答案不太可能回答你 真的 问;我当然不能回答那个问题而且你从来没有告诉我们那个问题是什么。
如所有评论中所述,SCOPE_IDENTITY
returns 在 当前 范围内生成的最后一个 IDENTITY
值的值。引用 documentation:
Returns the last identity value inserted into an identity column in the same scope. A scope is a module: a stored procedure, trigger, function, or batch. Therefore, if two statements are in the same stored procedure, function, or batch, they are in the same scope.
在你的程序中没有先验的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);
另外请注意,您将 column/parameter name
定义为 varchar(1)
。我建议解决这个问题,因为很少有人(如果有的话)的名字只有一个字符。
我有使用 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
我得到的错误:
cannot insert null into id column, column does not allow null, insert fail
知道如何解决这个问题吗?感谢任何帮助。
我将在这里回答 为什么 你会得到一个 NULL
,尽管这个答案不太可能回答你 真的 问;我当然不能回答那个问题而且你从来没有告诉我们那个问题是什么。
如所有评论中所述,SCOPE_IDENTITY
returns 在 当前 范围内生成的最后一个 IDENTITY
值的值。引用 documentation:
Returns the last identity value inserted into an identity column in the same scope. A scope is a module: a stored procedure, trigger, function, or batch. Therefore, if two statements are in the same stored procedure, function, or batch, they are in the same scope.
在你的程序中没有先验的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);
另外请注意,您将 column/parameter name
定义为 varchar(1)
。我建议解决这个问题,因为很少有人(如果有的话)的名字只有一个字符。