Excel에서 VBA 스크립트를 사용하여 새 행을 테이블에 삽입 한 다음 해당 행의 ID 값을 다시 가져 오는 중입니다. 내가 실행하는 경우 :ADODB Recordset에서 SELECT SCOPE_IDENTITY() 사용
INSERT INTO DataSheet(databaseUserID, currentTimestamp)
VALUES (1, CURRENT_TIMESTAMP);
SELECT SCOPE_IDENTITY()
를 Management Studio에서 행이 삽입되고 그것은 나에게 예상대로 반환 된 ID 값을 제공합니다. 그러나 VBA에서 ADODB 레코드 세트를 통해 동일한 쿼리를 실행할 때 문제가 발생합니다. 행이 실제로 삽입되었지만 ID 값에 액세스 할 수 없습니다. 레코드 세트는 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).
아름다운! 완벽하게 작동합니다. 감사합니다! – JoeCool