2012-11-28 100 views

回答

1

我會在這裏縮小到如何從SQL內部服務公開數據的普遍問題。有什麼可以做的就是重寫你的存儲過程爲Table Valued CLR function,流式傳輸結果。然後你可以使用這樣的:

insert into MyTable(id, name) 
select id, name from dbo.MyTableFunc(agrs) 

這個基礎設施是很好的優化,我用它,並能很快得到它每秒一些3K行,當我停下優化和瓶頸在獲得網絡上的行。

將服務作爲函數公開的好處在於,您還可以直接在查詢和連接中使用它,無需先將其存儲在磁盤上的表中(慢磁盤的額外步驟,事務日誌,鎖yadayada) 。它還取消優雅,你可以做top 100

如果你告訴我們更多/給一些代碼,我們可以幫助更多。

+0

其實,我第一次嘗試使用CLR table-UDF的原因與你提到的相同。但是我遇到了一個問題,我需要能夠僅投影一些列並且UDF具有預定義的模式。 所以,我試着用一個UDF解決它,它返回包含我想要投影的其他列的關鍵列和XML列。但是,由於xml序列化,它使得sqlclr變得極其緩慢,所以我將其改爲使用存儲過程。 現在,我使用沒有sqlbulkcopy的存儲過程(簡單轉換),它工作得很好,但它可能會成爲1m +行的問題。 – Yshayy