2014-02-28 84 views
0

我正在通過本地工作站上的SQL Server 2008 Express在鏈接的SQL Server 2000上做一些工作。 SQL2000坐在一個非常令人印象深刻的機架上,有很多可用的資源,所以我想盡可能使用它。LinkedServer遠程執行

我正在處理在遠程表上以TEXT格式存儲的XML字符串。我原來的查詢它所包含的子查詢,如下所示:

SELECT Id, FolderId, CAST(REPLACE(CAST(Content AS VARCHAR(MAX)) AS XML), 'encoding="utf-16"', '') AS ContentXML 
FROM [LinkedServer].[UPLSalesP].[dbo].[RSSDocument] 

但是我只能推測,大部分的子查詢被我的工作站,而不是在機架上執行,既不VARCHAR(MAX)XML數據類型在SQL2000可用。在250萬行上執行上述查詢10小時後,內存發生故障並中止。

我推定它的執行位置是否正確?如果我將其更改爲以下內容:

SELECT Id, FolderId, REPLACE(CAST(Content AS VARCHAR(8000)), 'encoding="utf-16"', '') AS ContentXML 
FROM [LinkedServer].[UPLSalesP].[dbo].[RSSDocument] 

子查詢是否會首先遠程執行?是否可以通過這種方式獲得任何效率,然後在本地2008 Express實例中轉換爲XML

回答

0

嘗試使用OPENQUERY來代替。這將在鏈接的服務器上執行select命令,並將結果傳遞回去。 這將是這個樣子:

SELECT Id, FolderId, ContentXML 
FROM OPENQUERY(LinkedServerName, 'SELECT Id, FolderId, CAST(REPLACE(CAST(Content AS VARCHAR(MAX)) AS XML), 'encoding="utf-16"', '') 
AS ContentXML 
FROM [dbo].[RSSDocument]') 

(如果我錯了溫柔,這是我的第一個答案!)