VBA에서 ADO 레코드 집합과 연결을 사용하여 SQL Server # TEMP 테이블에서 별도의 작업을 수행하려고합니다.ADO 레코드 집합 및 연결을 사용하여 동일한 #TEMP 테이블을 업데이트하십시오.
아래 코드에서 레코드와 연결이 동일한 세션/범위를 사용하고 있으므로 #TEMP 테이블에 두 개체 중 하나를 사용하여 액세스 할 수 있다고 생각합니다. 이것은 사실로 보이지 않습니다. 레코드 세트는 연결에 의해 생성 된 #TEMP 테이블을 표시하지만 레코드 세트에서 삽입 한 레코드는 연결이 표시되지 않습니다. 그리고 레코드 집합은 연결 개체에 의해 삭제 시도 후 레코드를 반환하지 않습니다.
나는 이것이 왜, 그리고 내가 그것을 올바르게 할 수 있는지 궁금해.
편집 : 로컬 #TEMP 테이블을 사용할지 아니면 전역 ## TEMP 테이블을 사용할지 아래 코드는 실패합니다.
Dim cn As New adodb.Connection
Dim rst As New adodb.Recordset
'Open Connection.
cn.Open cConnSeasFcst
'Create temp table.
cn.Execute "CREATE TABLE #TEMP (COL1 INT)"
'Open rst.
With rst
.ActiveConnection = cn
.CursorLocation = adUseClient
.CursorType = adOpenDynamic
.LockType = adLockBatchOptimistic
End With
'Add records to temp table using rst.
rst.Open "#TEMP"
For i = 1 To 5
rst.AddNew
rst!COL1 = i
rst.Update
Next
'Delete records using connection.
cn.Execute "DELETE #TEMP WHERE COL1 IN(2,4)", raff
'Display.
rst.Requery
While Not rst.EOF ' ##ALWAYS AT EOF. RECORDS ARE NOT RETURNED.##
Debug.Print rst!COL1
rst.MoveNext
Wend
마지막 레코드 다시 쿼리
는 전혀 레코드를 반환하지 않으며,raff
변수는 0이다 -는 연결 개체 레코드가 삽입 된 기록 중 하나를 볼 수 없습니다 나에게 나타납니다.
전역 범위를 지정하려면 '## TEMP'를 사용해야합니다. – Lankymart
[SQL Server에서 임시 테이블의 범위] 가능한 복제본 (http://stackoverflow.com/questions/18614344/scope-of-temporary-tables-in-sql-server) – Lankymart
[http]이 될 수 있지만 (http : //stackoverflow.com/a/37073685/692942), SET NOCOUNT ON;을 설정해보십시오. – Lankymart