SQL OPENQUERY UPDATE

时间:2014-05-26 07:10:43

标签: sql sql-server oracle

我正在尝试从SQL服务器更新Oracle表。我已经设置了链接服务器,我可以使用以下查询更新此表。

UPDATE OPENQUERY(LNK_SRV, 'SELECT BOGNUMBER, BOGDATA FROM DATA.BOGTAB')
SET BOGNUMBER = 009
WHERE BOGDATA = 'LIVE'

现在上面的查询会非常慢,因为您可以想象来自表DATA.BOGTAB的整个数据并且where子句是SQL服务器查询。

我想优化上面的查询,因此它很快,我看到这样做的一种方法是通过创建动态查询并执行它来在远程服务器上执行此更新语句。 我认为如果where子句以某种方式嵌入将在远程服务器上执行的查询中,将会有所帮助,因为它将提供过滤的数据集。 任何人都可以帮我弄清楚我如何动态创建查询并执行此更新语句。谢谢!

1 个答案:

答案 0 :(得分:0)

尝试了一些事情,我已经找到了解决方案......

DECLARE @VC_DYN_QUERY NVARCHAR(255)
SET @VC_DYN_QUERY = 'UPDATE DATA.BOGTAB SET BOGNUMBER = 009 WHERE BOGDATA = ''LIVE'''
EXECUTE (@VC_DYN_QUERY) AT LNK_SRV

这将只执行我们在远程服务器上准备的动态查询,这将快得多,因为我们没有通过网络传输大量数据,或者我们在where子句中没有任何昂贵的比较SQL服务器。

希望有人从中受益,就像我一样。谢谢!