0
在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
變量是零 - 在我看來,連接對象看不到任何的通過記錄插入的記錄。
你應該使用'## TEMP'來給它全局範圍。 – Lankymart
[SQL Server中臨時表的作用域]的可能重複(http://stackoverflow.com/questions/18614344/scope-of-temporary-tables-in-sql-server) – Lankymart
儘管它[可能是這個](http ://stackoverflow.com/a/37073685/692942),嘗試設置SET NOCOUNT ON;'。 – Lankymart