如何在 T-SQL 查询中针对连接到 SAP-HANA 的链接服务器使用“占位符”?

Posted

技术标签:

【中文标题】如何在 T-SQL 查询中针对连接到 SAP-HANA 的链接服务器使用“占位符”?【英文标题】:How do I use "Placeholder" in a T-SQL Query against a linked server connecting to a SAP-HANA? 【发布时间】:2019-03-07 16:34:30 【问题描述】:

我需要将位于 Hana 中的表视图中的数据提取到 MS-SQL 表中。 HANA 团队告诉我,我必须使用“占位符”来防止同时加载更改日志和活动表。

这是查询:

Declare @querytext nvarchar(1000)
Set @querytext ='
Insert into stagingtable
Select * from Openquery(LinkedServer,
''Select Field1, Field2, Field3 
From "SYSBI"."testdata.view/viewname"(''Placeholder''=(''$$Value1$$'',''00000''), ''Placeholder''=(''$$Value2$$'',''F'')); 
Where Field1 in (''ab'',''cd'',''ef''));''
'
EXEC(@querytext)

链接服务器工作(测试连接工作)。在 Hana(或 SAP)中运行此查询有效。 但是,当使用 Openquery 在 SSMS 中运行查询时,出现语法错误:

“占位符”附近的语法不正确

我尝试了 ", ' 或 '' 的所有变体,或者完全忽略它,但似乎没有任何帮助。有人有想法吗?

【问题讨论】:

【参考方案1】:

语法有一些拼写错误,将所有内容放入变量的字符串中仍然存在问题。然而:

Insert into stagingtable
Select * from Openquery(LinkedServer,
'Select Field1, Field2, Field3 
From "SYSBI"."testdata.view/viewname"(''Placeholder''=(''$$Value1$$'',''00000''), 
''Placeholder''=(''$$Value2$$'',''F'')) 
Where Field1 in (''ab'',''cd'',''ef''));')

按预期工作。 我现在“只”需要将整个查询包装成一个字符串以将其放入一个变量中。

【讨论】:

以上是关于如何在 T-SQL 查询中针对连接到 SAP-HANA 的链接服务器使用“占位符”?的主要内容,如果未能解决你的问题,请参考以下文章

无法启动T-SQL调试。未能连接到计算器"."。这是在主机名解析时通常出现的暂时错误……

如何在这个特定的 T-SQL 查询中使用表变量?

数据库-T-SQL 语句-高级查询

减少连接到 SQLXML 表的执行时间

如何在 Spring Boot 测试中连接到内存中的 HSQLDB 以进行查询

T-SQL While 循环和连接