Verwenden von "SELECT SCOPE_IDENTITY ()" im ADODB-Recordset

Unter Verwendung eines VBA-Skripts in Excel versuche ich, eine neue Zeile in eine Tabelle einzufügen und dann den Identitätswert dieser Zeile zurückzugewinnen. Wenn ich renne:

INSERT INTO DataSheet(databaseUserID, currentTimestamp)
VALUES (1, CURRENT_TIMESTAMP);
SELECT SCOPE_IDENTITY()

In Management Studio wird die Zeile eingefügt und gibt mir den erwarteten Identitätswert zurück. Wenn ich jedoch dieselbe Abfrage über ein ADODB-Recordset in VBA ausführe, treten Probleme auf. Die Zeile ist zwar eingefügt, aber ich kann nicht auf den Identitätswert zugreifen. Das Re-Cord-Set listet 0 Felder auf und ist tatsächlich außerdem geschlossen worden. Ich habe es mit und ohne Semikolon versucht und auch versucht, die Abfrage als einzelne Transaktion auszuführen. Gleiches Geschäft, keine Würfel. Irgendeine Idee, was los ist?

Hier ist mein 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)

Und das Meldungsfeld wird nicht angezeigt, weil dasrs.Fields(0).Value gibt NULL zurück. Ich habe eine Uhr zu rs hinzugefügt und, wie gesagt, zeigt 0 Felder nach der Abfrage an und scheint auch geschlossen zu sein (state = 0).

Antworten auf die Frage(4)

Ihre Antwort auf die Frage