为什么 openquery 在 SQL 服务器上返回 0 行,但在目标服务器上有 900k 行



需要帮助来弄清楚为什么我在服务器上执行的远程查询返回 0 行,但相同的查询在目标数据库中返回超过 900k 行。

字符串长度少于 8000 个字符,所以我不会在这里发布。 但这基本上是结构:

declare @SQL varchar(MAX);
declare @D varchar(15);
declare @Per varchar(15);
declare @NextPer varchar(15);
declare @NextYPer varchar(15);
set @D = N'01-JUN-2019'
set @Per = N'2020004';
set @NextYPer = N'2021004'
set @NextPer = N'2020005'
set @SQL = N' SELECT  ...... '
set @SQL = N'select * from openquery ([LK1], "'+@SQL+'")';
execute( @SQL);
print @SQL;

注意:链接服务器可以工作,并成功地用于其他字符串较短的开放查询。我尝试使用 EXECUTE (@SQL( AT 但仍然得到 0 行。 当我直接在 Oracle 数据库上执行打印输出时,查询运行大约 15 分钟并给出结果。

首先,OPENQUERY要求第二个参数是查询字符串。SQL Server 中的字符串写在单引号之间。来自 OPENQUERY 文档:

OPENQUERY ( linked_server ,'query' ) 

不仅如此,出现在该字符串中的 SQL 需要将查询中显示的任何单引号加倍。假设您有要执行以下查询的 SQL:

SELECT * FROM some_table WHERE name='TT.';

你可以把它写成:

OPENQUERY(lks,'SELECT * FROM some_table WHERE name=''TT.''')

但是如果你在动态 SQL 语句中有这个,这将变成

DECLARE @s VARCHAR(MAX);
SET @s='SELECT * FROM OPENQUERY(lks,''SELECT * FROM some_table WHERE name=''''TT.'''''')';

因此,即使是更琐碎的SQL查询,这也是单引号的爆炸式增长。数你们的报价,确保查询本身符合鼻烟(即报价已适当加倍(。

谢谢大家的输入。

根本原因只是 Date 参数的格式,该参数在链接服务器上未正确运行。我所要做的就是更改我的查询以使用它:

SO_BOOK_DATE

而不是

SO_BOOK_DATE <"@D"。

相关内容

  • 没有找到相关文章

最新更新