Foxtable(狐表)用户栏目专家坐堂 → 关于Insert into 执行后,如何同时获得该行的_Identify 值


  共有2394人关注过本帖树形打印复制链接

主题:关于Insert into 执行后,如何同时获得该行的_Identify 值

帅哥哟,离线,有人找我吗?
ap9709130
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1468 积分:11440 威望:0 精华:0 注册:2013/11/24 22:10:00
关于Insert into 执行后,如何同时获得该行的_Identify 值  发帖心情 Post By:2016/9/28 23:37:00 [只看该作者]

如题,可以在执行的同时获得_Identify 的值吗?

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:109467 积分:556997 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2016/9/29 8:45:00 [只看该作者]

如果有编号的,插入后通过编号获取这行数据即可。

如果一定要用SQLCommand操作,参考
Access,必须开启事务

try
    Dim val As Integer
    Connections("A").BeginTransaction()
    Dim cmd As New SQLCommand
    cmd.C
    cmd.CommandText = "insert into {表A}(第一列,第二列) values('aa','bb')"
    cmd.ExecuteNonQuery
    cmd.CommandText = "select @@IDENTITY as ID"
    val  = cmd.ExecuteScalar()
    Connections("A").Commit
    Output.Show(val)
Catch ex As Exception '如果出错
    msgbox(ex.message)
    Connections("A").Rollback() '回滚事务,撤销所有操作
End Try

sqlserver参考

Dim val As Integer
Dim cmd As New SQLCommand
cmd.C
cmd.CommandText = "insert into {表A}(第一列,第二列) values('aa','bb');select @@IDENTITY as ID"
val  = cmd.ExecuteScalar()
Output.Show(val)

如果是批量插入的,以上方法只能获取最后插入的IDENTITY值

 回到顶部
帅哥哟,离线,有人找我吗?
ap9709130
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1468 积分:11440 威望:0 精华:0 注册:2013/11/24 22:10:00
  发帖心情 Post By:2017/8/27 22:27:00 [只看该作者]

老师,

如果我想批量插入数量,表中有一个列比如 名称 为: DW ,插入的同时DW的值是:_Identify. 这种SQL的语名要怎么写?

如果只是插入一行可以这样写:

Dim c m d As N
Dim sql As String = "Ins e rt In to 配方信息表 (配方名称) Values('互联网1');up d ate 配方信息表 set DW = @@IDENTITY where _Identify = @@IDENTITY" 
c m d.Co nne ctio nNa me = "h"
cm d.Com mandText = sql
cmd.Ex ecut eN onQuery()

但是两行就会报错。如果同时插入要怎么写呢?


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/8/27 23:28:00 [只看该作者]

方法一:

 

https://www.baidu.com/baidu?wd=insert+into++OUTPUT

 

方法二:

 

插入多少行都没问题的啊,报什么错?贴出网站代码。


 回到顶部
帅哥哟,离线,有人找我吗?
ap9709130
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1468 积分:11440 威望:0 精华:0 注册:2013/11/24 22:10:00
  发帖心情 Post By:2017/8/29 11:18:00 [只看该作者]

老师

output 应该是好方法,但大foxtable中的SQL要怎么用, 

Dim cmd As New SQLCommand

c m d.Conn e cti
cmd.Co m mand Text = "Ins er t In t o 配方物料表 (物料名称,INCI名称,录入人,DW) Values('A','B','C',output inserted._Identify)" 
c md.Ex ec uteN onQuery()

这样会报错? 编码基础是菜鸟,只会foxtable,但一样也能做个不错的系统,可见foxtable还是很适合菜鸟的!


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/8/29 11:36:00 [只看该作者]

Dim cmd As New SQLCommand
cmd.ConnectionName = "test"
cmd.CommandText = "Insert Into abc (第一列, 第二列) output inserted._Identify Values('A','B')"
msgbox(cmd.ExecuteScalar)

 回到顶部
帅哥哟,离线,有人找我吗?
ap9709130
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1468 积分:11440 威望:0 精华:0 注册:2013/11/24 22:10:00
  发帖心情 Post By:2017/8/29 11:43:00 [只看该作者]

老师

Dim cmd As New SQLCommand
cmd.ConnectionName = "test"
cmd.CommandText = "Insert Into abc (第一列, 第二列) output inserted._Identify Values('A','B')" 
msgbox(cmd.ExecuteScalar)

第二列中,要直接引用这output inserted._Identify值要怎么写?

cmd.CommandText = "Insert Into abc (第一列, 第二列) output inserted._Identify Values('A',???)" 

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/8/29 11:55:00 [只看该作者]

你本来的代码就没问题啊

 

Dim cmd As New SQLCommand
cmd.ConnectionName = "test"
cmd.CommandText = "Insert Into abc (第一列, 第二列) output inserted._Identify Values('A','B');update abc set 第三列 = @@IDENTITY where _Identify = @@IDENTITY"
msgbox(cmd.ExecuteScalar)
cmd.CommandText = "Insert Into abc (第一列, 第二列) output inserted._Identify Values('A','B');update abc set 第三列 = @@IDENTITY where _Identify = @@IDENTITY"
msgbox(cmd.ExecuteScalar)


 回到顶部
帅哥哟,离线,有人找我吗?
ap9709130
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1468 积分:11440 威望:0 精华:0 注册:2013/11/24 22:10:00
  发帖心情 Post By:2017/8/29 12:09:00 [只看该作者]

老师

这种方法插入一条是没问题问题的,如果是指插入就会报错的,比如

Dim c m d As N
Dim sql As String = "Ins e rt In to 配方信息表 (配方名称) Values('互联网1');up d ate 配方信息表 set DW = @@IDENTITY where _Identify = @@IDENTITY"  & vbcrlf
sql = sql & "UNION ALL" & vbcrlf
sql = sql & "Ins e rt In to 配方信息表 (配方名称) Values('互联网2');up d ate 配方信息表 set DW = @@IDENTITY where _Identify = @@IDENTITY"

c m d.Co nne ctio nNa me = "h"
cm d.Com mandText = sql
cmd.Ex ecut eN onQuery()

这样就会报错的。但是插入操作中,批量的效率又比单条要高好多,想两个都用上

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/8/29 12:15:00 [只看该作者]

不能用union all,必须一条一条插入,才能得到主键值。

 

你可以最后执行update语句整体修改dw的值啊,如

 

update 配方信息表 set DW = _Identify where dw Is null or dw <> _Identify


 回到顶部
总数 12 1 2 下一页