首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Server Scope_Identity()使用问题

问SQL Server Scope_Identity()使用问题
EN

Stack Overflow用户
提问于 2011-06-21 03:31:46
回答 3查看 2.6K关注 0票数 0

我不明白为什么这个使用scope_identity()的多表插入(存储过程)不起作用。这就是它的要点(请原谅这里缺乏想象力的命名):

​

​

表B的RowID列显然是一个整数,没有被设置为标识自动递增或类似的东西。

如果我在management studio中运行它,它会显示1行受到影响,但它不会执行插入操作。

如果我从代码中运行它,我得到一个错误,我不能在TableB,RowID中插入空值,这是正确的,它有一个非空值约束。但是它应该从第一个表中获取scope_identity()。

我已经在事务内和事务外尝试过它,并使用各种参数初始化...我要死了。提前感谢您的帮助。

EN

回答 3

Stack Overflow用户

发布于 2011-06-21 03:37:08

我假设tableA在数字列上设置了标识?

如果没有,SCOPE_IDENTITY()将为NULL

"1行受影响“也不是来自此插入到tableA中。

票数 1
EN

Stack Overflow用户

发布于 2011-06-21 04:51:07

这里显示的代码没有任何错误。我认为在简化示例时,您已经删除了有问题的代码。

尝尝这个。

代码语言:javascript
复制
declare @TableA table (IDA int identity primary key, ColA int)
declare @TableB table (IDB int primary key, ColB int)

declare @RecordID int = 0,
        @Val1 int
        
if @RecordID = 0
  begin
    declare @NewID int

    insert into @TableA values (@Val1)
    set @NewID = scope_identity()

    insert into @TableB values (@NewID, @Val1)
  end
else
  begin
    print 'Do something else'
  end  

select *
from @TableA, @TableB

结果:

代码语言:javascript
复制
IDA         ColA        IDB         ColB
----------- ----------- ----------- -----------
1           NULL        1           NULL

你自己去兜风吧。https://data.stackexchange.com/stackoverflow/q/103697/using-scope-identity

票数 1
EN

Stack Overflow用户

发布于 2011-06-21 04:57:34

要查看的另一件事是,表上是否有触发器(特别是INSTEAD OF触发器),这可能会导致记录无法插入。

在初始化@newId变量之后,您可以添加一条print语句来查看它的值,以查看它是否为null或是否具有值。

尝试使用显式事务和Try catch块,如果catch块没有通过第一个insert,那么您就可以看到在catch块中得到了什么错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6416403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档