日期:2014-05-16  浏览次数:20783 次

oracle中序列的currval在Sqlserver中如何使用?
用的是JDBC,想插入主表和子表在同一个方法同一事务中,
我的oracle的用法是:
先插入主表,
String sql = "insert into bs_order values(bs_seq_id.nextval,?,?,?,?)"
再查询出当前序列的值,
sql = "select bs_seq_id.currval id from dual";
然后再插入子表,
"insert into bs_orderitem values(bs_seq_id.nextval,?,?,?,?)";
子表中主表的ID的值是上面查出来的

现在使用Sqlserver,主表和子表的ID在建表的时候都设置成了identity自增,如何实现和上面一样的功能?
谢谢了!!
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

sql server 2012开始才支持系列,所以如果你的sql server 不是2012的,那么肯定就不能支持了。

在比较早的版本中由于没有序列,那么使用identity的,也就是自增列,不过你得修改代码,因为自增列,就像这个名字一样,是自动增加的,如上面的例子一样,是不需要插入,而是每次insert时,自动插入值的


对啊,我知道是自动插入,但是子表外键得和主表主键对应上啊


insert 主表

然后字表对应主表的id用这个: scope_identity()

insert  子表
values(scope_identity())


好的谢谢你!我用JDBC中的
pst = conn.prepareStatement(sql,pst.RETURN_GENERATED_KEYS);
...
rs=pst.getGeneratedKeys();
...
这样也行啊?


你是想在jdbc里实现这种操作吗,这个我还真不清楚能否实现
------解决方案--------------------

-- SQL Server 2012 以下版本,可参考下面的代码:
create table t
(
id int identity
)

insert into t default values 

select @@IDENTITY