以文本方式查看主题

-  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

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
--  发布时间: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
--  
老师

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\',???)" 

--  作者:有点甜
--  发布时间: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
--  发布时间: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