2014-02-28 85 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]') 

(如果我错了温柔,这是我的第一个答案!)