我正在本地工作站上通过SQL Server 2008 Express在链接的SQL Server 2000上做一些工作。 SQL2000坐在一个非常令人印象深刻的机架上,有很多可用的资源,所以我想尽可能地利用它。
我正在处理远程表上以TEXT
格式存储的XML字符串。我的原始查询在其中包含一个子查询,如下所示:
SELECT Id, FolderId, CAST(REPLACE(CAST(Content AS VARCHAR(MAX)) AS XML), 'encoding="utf-16"', '') AS ContentXML
FROM [LinkedServer].[UPLSalesP].[dbo].[RSSDocument]
但是我只能假设大多数子查询正在我的工作站而不是机架上执行,因为SQL2000中没有VARCHAR(MAX)
或XML
数据类型。在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 :(得分: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]')
(如果我错了,那就是我的第一个答案!)