以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 关于Insert into 执行后,如何同时获得该行的_Identify 值 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=91082) |
|
-- 作者:ap9709130 -- 发布时间:2016/9/28 23:37:00 -- 关于Insert into 执行后,如何同时获得该行的_Identify 值 如题,可以在执行的同时获得_Identify 的值吗? |
|
-- 作者:有点蓝 -- 发布时间: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 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 -- 发布时间: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() 但是两行就会报错。如果同时插入要怎么写呢? |
|
-- 作者:有点甜 -- 发布时间:2017/8/27 23:28:00 -- 方法一:
https://www.baidu.com/baidu?wd=insert+into++OUTPUT
方法二:
插入多少行都没问题的啊,报什么错?贴出网站代码。 |
|
-- 作者:ap9709130 -- 发布时间: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还是很适合菜鸟的! |
|
-- 作者:有点甜 -- 发布时间: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 -- 发布时间:2017/8/29 11:43:00 -- 老师
|
|
-- 作者:有点甜 -- 发布时间:2017/8/29 11:55:00 -- 你本来的代码就没问题啊
Dim cmd As New SQLCommand |
|
-- 作者:ap9709130 -- 发布时间: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() 这样就会报错的。但是插入操作中,批量的效率又比单条要高好多,想两个都用上
|
|
-- 作者:有点甜 -- 发布时间:2017/8/29 12:15:00 -- 不能用union all,必须一条一条插入,才能得到主键值。
你可以最后执行update语句整体修改dw的值啊,如
update 配方信息表 set DW = _Identify where dw Is null or dw <> _Identify |