我正在尝试SqlTransaction
在VB.Net中使用A对两个表执行插入操作,我想将第一个表中最后插入的ID插入第二个表的列中。
我想使用OUTPUT INSERTED.ID
而不是@SCOPE_IDENTITY()
。
这是从SQL Server Profiler中提取的两个查询:
INSERT INTO USER(USER_NAME)
OUTPUT INSERTED.USER_ID
VALUES (@USER_NAME)
INSERT INTO USER_ADDRESS(USER_ID, USER_ADDRESS)
VALUES ('', GETDATE(), ''001'', @OPD_OVP_NO, @OPD_PAT_CODE, @OPD_DATE, @OPD_AMOUNT)
这是VB.Net代码:
Dim sqlTransaction As SqlTransaction= sqlConnection.BeginTransaction
Dim sqlCommand As New SqlCommand With {.Connection = sqlConnection}
sqlCommand.CommandText = "INSERT INTO USER(USER_NAME) OUTPUT INSERTED.USER_ID VALUES (@USER_NAME)"
sqlCommand.Parameters.AddWithValue("@USER_NAME", "ABC")
sqlCommand.Transaction = sqlTransaction
sqlCommand.ExecuteNonQuery()
sqlCommand.Parameters.Clear()
sqlCommand.CommandText = "INSERT INTO USER_ADDRESS(USER_ID,USER_ADDRESS)VALUES(@LASTID, @USER_ADDRESS)"
sqlCommand.Parameters.AddWithValue("@LASTID", LASTID)'//LAST ID should be from the previously inserted ID
sqlCommand.Parameters.AddWithValue("@USER_ADDRESS","AB Street")
sqlCommand.Transaction = sqlTransaction
sqlCommand.ExecuteNonQuery()
sqlTransaction.Commit()
我检查了其他线程,但它们仅显示如何从@SCOPE_IDENTITY()
或从中获取最后插入的ID OUTPUT INSERTED.USER_ID
,但是没有关于如何为另一个insert语句重用该值的任何内容。
您不能直接在第二个语句中使用第一个insert语句的INSERTED.ID。
您应该首先使用OUTPUT INTO将其存储在临时表中。
DECLARE @MyTableVar table(USER_ID int);
DECLARE @NewUserID int;
INSERT INTO USER(USER_NAME)
OUTPUT INSERTED.USER_ID INTO @MyTableVar
VALUES (@USER_NAME);
SET @NewUserID = (SELECT USER_ID FROM @MyTableVar);
INSERT INTO USER_ADDRESS(USER_ID, USER_ADDRESS)
VALUES(@NewUserID, @USER_ADDRESS);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句