Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server VBA INSERT和@@Identity(第二次插入新表时无法获得@@Identity)_Sql Server_Vba - Fatal编程技术网

Sql server VBA INSERT和@@Identity(第二次插入新表时无法获得@@Identity)

Sql server VBA INSERT和@@Identity(第二次插入新表时无法获得@@Identity),sql-server,vba,Sql Server,Vba,下面,我在表“test”中插入一个值,并成功地检索到新行的@标识。然后我将一个值插入表test2(成功),但检索到的@标识始终为“0”。获取第二个@标识有什么问题?我怎样才能解决这个问题 Sub GoDo() Dim testIdentity As Integer Dim test2Indentity As Integer Dim name As String Dim concept As String name = Cells(1, 1) concept = Cells(1, 2)

下面,我在表“test”中插入一个值,并成功地检索到新行的@标识。然后我将一个值插入表test2(成功),但检索到的@标识始终为“0”。获取第二个@标识有什么问题?我怎样才能解决这个问题

Sub GoDo()

Dim testIdentity As Integer
Dim test2Indentity As Integer

Dim name As String
Dim concept As String

name = Cells(1, 1)
concept = Cells(1, 2)


Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim rs2 As New ADODB.Recordset

cn.ConnectionString = "Provider=SQLOLEDB;Data Source=MARS;Initial Catalog=automation;Trusted_connection=yes;"
cn.Open

cn.Execute ("INSERT INTO test(data) VALUES ('" & name & "')")
rs.Open "SELECT @@identity AS NewID", cn
testIdentity = rs.Fields("NewID")
rs.Close

cn.Execute ("INSERT INTO test2(data) VALUES ('" & concept & "')")
rs2.Open "SELECT @@identity AS NewID", cn
testIdentity = rs2.Fields("NewID")
rs2.Close

cn.Execute ("INSERT INTO test3(test_id, test2_id) VALUES ('" & testIdentity & "','" & test2Indentity & "')")

cn.Close

End Sub
结果例如:在Test3(test\u id,test2\u id)中插入值('18','0')

如何:

sql = "INSERT INTO test(data) VALUES ('" & name & "');" & _
      "SELECT NewID = SCOPE_IDENTITY();"
SET rs = cn.Execute (sql)
testIdentity = rs.Fields("NewID")

话虽如此,您至少应该使用参数化语句,或者更好的是使用存储过程。另外,我不知道为什么在插入数值时要在数值周围加单引号。您是否将数字存储为字符串?为什么?如果不是,为什么你要把它们当作字符串?

不应该是test2Identity=rs2.Fields(“NewID”)请见见。约翰,我应该被鞭打。谢谢GSerg命名有什么不对吗?我还建议使用
SCOPE\u IDENTITY()
而不是其他任何东西来获取新插入的标识值。