2016-12-30 54 views
2

在SQL Server 2016中,我有一個存儲過程。在這種SP我想用下面的語句來獲取從一個鏈接服務器(PostgreSQL的)一個視圖中的所有數據:OPENQUERY拋出「內存不足」錯誤:限制行直到全部加載

INSERT INTO myTable 
SELECT Field1, 
    Field2, 
    Field3, 
    ... 
FROM OPENQUERY(myServer, 'SELECT * FROM myDatabase.mySchema.myView') 

當我使用它像這樣,我經過幾次收到以下錯誤信息分鐘:

Out of memory while reading tuples.

我改變了SELECT聲明OPENQUERY只得到了第一個百萬行後就正常了:

SELECT * FROM myDatabase.mySchema.myView ORDER BY Field1 LIMIT 1000000 

現在我不確定WH以最實際的方式獲取所有數據。我可以插入第一個1000000行,然後使用OFFSET插入下一個1000000。但我不認爲這將是一個很好的解決方案,因爲我不知道行數是多少。循環將是另一種方式,但我真的不知道這是否是實現我想要的最簡單的方法。

任何幫助,將不勝感激。

+0

您的視圖中是否存在主鍵? –

+0

@MitchWheat不幸的是,視圖中沒有主鍵和唯一列。 –

回答

1

我認爲你使用odbc驅動來創建鏈接服務器。這是psqlODBC驅動內存配置的問題。

您更改ODBC驅動程序設置打開數據源

按「配置」,然後在打開數據源的詳細

「選項」部分選擇「數據源」

,並在打開的窗口檢查「使用聲明/獲取」。

enter image description here

+0

我正在使用「Microsoft OLE DB Provider for ODBC Drivers」進行連接。但是,我無法更改鏈接服務器上的任何psqlODBC設置。 –

+0

你已經創建了ODBC數據源?你已經添加了DNS服務器,你會發現該屬性.. –

+0

添加圖像太 –