在 Excel 中使用 VBA 脚本,我试图在表中插入一个新行,然后取回该行的标识值。如果我运行:
INSERT INTO DataSheet(databaseUserID, currentTimestamp)
VALUES (1, CURRENT_TIMESTAMP);
SELECT SCOPE_IDENTITY()
在 Management Studio 中,插入了该行,并按预期为我提供了返回的标识值。但是,当我通过 VBA 中的 ADODB 记录集运行完全相同的查询时,我遇到了麻烦。该行确实已插入,但我无法访问标识值。记录集列出了 0 个字段,实际上也已关闭。我尝试过使用分号和不使用分号,我还尝试将查询作为单个事务运行。同样的交易,没有骰子。知道发生了什么吗?
这是我的VBA:
Dim rs As ADODB.Recordset
Dim cn As Connection
Dim SQLStr As String
Dim serverName As String
Dim databaseName As String
serverName = "MSSQLServer"
databaseName = "QA"
cxnStr = "Driver={SQL Server};Server=" & serverName & ";Database=" & databaseName & ";"
SQLStr = "INSERT INTO DataSheet(databaseUserID, currentTimestamp)
VALUES (1, CURRENT_TIMESTAMP); SELECT SCOPE_IDENTITY()"
Set cn = New ADODB.Connection
cn.Open cxnStr
Set rs = New ADODB.Recordset
rs.Open SQLStr, cn, adOpenKeyset, adLockOptimistic
MsgBox (rs.Fields(0).Value)
并且消息框无法显示,因为rs.Fields(0).Value
返回 NULL。我在 rs 中添加了一个手表,并且就像我说的那样,在查询后显示 0 个字段并且似乎也已关闭(状态 = 0)。