【发布时间】:2020-07-31 04:35:41
【问题描述】:
我正在尝试通过我们的 SQL 服务器从我们的 Oracle 服务器查询数据。为了以瘦客户端方式执行此操作,我使用了 OpenQuery。我想构建一个基于表的函数,可用于根据需要查询各种链接表。我不能完全弄清楚使这项工作的语法。这是我到目前为止所拥有的。非常感谢任何帮助!
CREATE FUNCTION [dbo].[fnTEST](
@Table varchar (100),
@Fields varchar (1000),
@Condition varchar(5000)
)
RETURNS
@TEST TABLE()
AS
BEGIN
DECLARE @OPENQUERY nvarchar(4000);
DECLARE @TSQL nvarchar(4000);
SET @OPENQUERY = 'SELECT * FROM OPENQUERY([TEST-Link],'''
SET @TSQL = 'SELECT ' + @Fields + ' FROM TEST.' + @Table + ' WHERE ' + @Condition + ''')'
EXEC (@OPENQUERY+@TSQL)
END;
我目前遇到的错误是:
Msg 102, Level 15, State 1, Procedure fnTEST, Line 12 [Batch Start Line 7]
Incorrect syntax near ')'.
在@TEST TABLE()中突出显示
【问题讨论】:
-
每当您使用动态 SQL 时,您几乎总是会走下坡路。您是否考虑过不需要动态 SQL 的解决方案?
-
调试是程序员工作的一部分。您是否尝试在执行之前打印每个变量以查看它的外观???
PRINT @TSQL,PRINT @OPENQUERY + @TSQL -
另外,你不能从函数中调用存储过程。
标签: sql-server oracle tsql dynamic-sql openquery