CREATE FUNCTION FUN_ReturnTable
@para VARCHAR(50)
RETURNS @table TABLE(
col VARCHAR(50)
BEGIN
INSERT INTO @table
( col )
VALUES ( 'This is Test.'),
( @para )
RETURN
CREATE FUNCTION FUN_ReturnValue (@para VARCHAR(50)) RETURNS varchar(50)
BEGIN
RETURN ('Input para is '+@para)
服务器A上的数据库可以执行
SELECT * FROM Test.dbo.FUN_ReturnTable('haha') --返回表
SELECT dbo.FUN_ReturnValue('haha') --返回单个值
然后在服务器B上的数据库运行以下语句调用(假设配置的链接服务器为LS)
SELECT LS.Test.dbo.FUN_ReturnValue('haha')
于是就报错了:"不允许远程函数引用 'LS.Test.dbo.FUN_ReturnValue',找不到列名 'LS',或者列名不明确。"
可以看到这样直接通过链接数据库调用是不行的。需要换个方式,改用OPENQUERY。
DECLARE @a VARCHAR(50)
set @a = (select * from openquery(LS,'select Test.dbo.FUN_ReturnValue(''haha'')'))
select @a --返回的字符串值
SELECT * from openquery(LS,'select * from Test.dbo.FUN_ReturnTable(''haha'')') --返回的表值
以上的调用,函数的参数值是写死的,如果传一个动态参数,改成下面这样:
DECLARE @a VARCHAR(50)
DECLARE @b VARCHAR(50)
set @a = (select * from openquery(LS,'select Test.dbo.FUN_ReturnValue('''+@b+''')'))
select @a
是无法运行的,提示错误:
这个问题我就费解了,OPENQUERY的第二个参数不能直接带有动态变量,不知道啥原因,官网上也备注说明不可以含有参数。
解决方法是换种方式调用,改用EXEC的方法。
DECLARE @b VARCHAR(50)
DECLARE @sql varchar(500)
set @b = 'haha';
set @sql = 'select a from openquery(LS,''select Test.dbo.FUN_ReturnValue('''''+@b+''''') AS a'')';
exec(@sql);
以上语句是可以执行的,输出“Input para is haha”单行的字符串。那么现在问题来了,我想将现在输出的结果赋值给一个本地变量@a,所以想当然就这样写
DECLARE @a VARCHAR(50)
DECLARE @b VARCHAR(50)
DECLARE @sql varchar(500)
set @b = 'haha';
set @sql = 'select a from openquery(LS,''select Test.dbo.FUN_ReturnValue('''''+@b+''''') AS a'')';
set @a = exec(@sql); --是错误的,语法错误
set @a = (select * from exec(@sql)); --是错误的,语法错误
select @a;
以上给@a变量赋值方法都不行。于是将@a改为表变量。
DECLARE @b VARCHAR(50)
DECLARE @sql varchar(500)
DECLARE @a table( name varchar(50))
set @b = 'haha';
set @sql = 'select a from openquery(LS,''select Test.dbo.FUN_ReturnValue('''''+@b+''''') AS a'')';
insert into @a exec(@sql); --将结果插入表里
select name from @a
这样结果就保存到表变量了。调用返回表值的函数也是可以的。
DECLARE @b VARCHAR(50)
DECLARE @sql varchar(500)
DECLARE @a table( name varchar(50))
set @b = 'haha';
set @sql = 'select * from openquery(LS,''select * from Test.dbo.FUN_ReturnTable('''''+@b+''''') AS a'')'; --调用表值函数。
insert into @a exec(@sql);
select name from @a
- 1.SQL SERVER通过链接服务器是可以调用远程数据库的存储过程的。
- 通过
exec LS.Test.dbo.testSP 'haha' 的方式,其中LS是链接服务器,Test是数据库名称。但是这种方式需要将链接服务器配置为用户RPC。 - 通过
select * from openquery(LS,'exec Test.dbo.testSP ''haha'' ')的方式,其中LS是链接服务器,Test是数据库名称。
- 2.SQL SERVER通过链接服务器远程调用函数不能通过
LS.Test.dbo.testFun('haha')的方式直接调用,改用OPENQUERY的方式。 - 3.OPENQUERY的第二个参数不能含有参数变量。如果需要传递参数,改成拼接字符串的形式,
EXEC 命令执行字符串。
【SQL SERVER】OPENQUERY远程函数引用及参数传值问题模拟数据两台服务器,都安装有数据库,服务器A,服务器B。服务器B的数据库上配置有指向服务器A的数据库的链接数据库。服务器A的数据库Test里创建以下两个函数,一个函数返回一个表值,一个返回单个字符串值。CREATE FUNCTION FUN_ReturnTable( @para VAR
具有零依赖关系的严肃 OData 查询 url 构建器。
##为什么这个? OpenQuery 提供了一种将过滤、选择、展开和其他命令链接在一起的方法。 没有缓存,没有复杂的客户端框架。 OpenQuery 构建 URL,您可以选择如何获取数据。
##如何使用
[示例 JSFiddle] ( )
var query = new OpenQuery();
query.from("/employees");
query.let("department", 6)
.where("item => item.DepartmentId == $department");
var finalq = query.includeCount(true).skip(10).take(10).toString();
“/employees?$filter=(DepartmentId
近日因为公司系统需要,要从SQL2005链接INFORMIX进行数据同步,搜遍了网上竟然没有针对OpenQuery专门的介绍和解答;所以才有此文,针对初学者、使用过的、遇到问题的,搜罗并根据实际经验撰写此文;
一、OPENQUERY 函数介绍
.使用 OPENQUERY 函数在链接服务器上执行直接传递查询的语法和事实;
.直接传递查询示例的 SQL 语句:在链接服务器 XXXServe
原文:https://blog.csdn.net/u013641136/article/details/50379596
做过一个项目,需要在SQLSERVER创建对ORACLE的DBLINK然后通过OPERQUERY访问ORACLE查询记录并返回到SQLSERVER某表
ORACLE中的数据量在100W行左右,采用insert into T1(X1,X2,X3) SELECT...
在 MS SQL Server 中访问其他远程数据库的数据可以通过 OPENQUERY (Transact-SQL) 函数来实现。首先创建一个链接服务器,然后像普通表一样维护远程的数据。
对给定的链接服务器执行指定的传递查询。该服务器是 OLE DB 数据源。OPENQUERY 可以在查询的 FROM 子句中引用,就好象它是一个表名。OPEN...
在指定的链接服务器上执行指定的传递查询。该服务器是 OLE DB 数据源。OPENQUERY 可以在查询的 FROM 子句中引用,就好象它是一个表名。OPENQUERY 也可以作为 INSERT、UPDATE 或 DELETE 语句的目标表进行引用。但这要取决于 OLE DB 访问接口的功能。尽管查询可能返回多个结果集,但是 OPENQUERY 只返回第一个。
OPENQU...
可以
使用Linked Server来连接SQL Server和MySQL,然后
使用OPENQUERY函数来执行INSERT INTO语句。示例代码如下:
INSERT INTO
OPENQUERY(MySQL_Linked_Server, 'SELECT * FROM MySQL_Table')
VALUES (1, 'John', 'Doe', '
[email protected]')
其中,MySQL_Linked_Server是你在SQL Server中创建的Linked Server的名称,MySQL_Table是你要插入数据的MySQL表的名称。注意,你需要在SQL Server中安装MySQL ODBC驱动程序才能创建Linked Server。
The SSL connection could not be established, see inner exception. The remote certificate is invalid
Ubuntu 、Debian的 bash和dash的切换