SqlServer调用OPENQUERY函数远程执行增删改查

原创 2015年11月19日 16:06:08

由于业务需求,我的SqlServer数据库通过MySQL的ODBC驱动连接了一个远程MySQL数据库,在SqlServer上要怎么远程执行MySQL命令呢,经过一番百度,将练习内容整理如下。

/*
OPENQUERY函数,远程执行数据库增删改查
关于OPENQUERY函数第二个参数不支持拼接变量的方案
方案1:将OPENQUERY语句整个拼接为字符串,再用EXEC执行该字符串语句
方案2:将要拼接的变量直接挪移到括号外进行拼接

由于字符串中单引号多层引用需要用到很多个单引号,容易混淆,导致方案1写起来头疼、眼睛疼,但是自由度大,想怎么来就怎么来。
而方案2能够清晰简洁地使用变量,但经我目前的测试,发现只有SELECT语句和DELETE语句的WHERE子句可以挪移出来(见上方SQL语句),限制太大。

OPENQUERY(MySQL, 'select * from hhp_user where chrusername = ''hhp'';')
第一个参数为配置好的链接服务器名称,第二个参数为要执行的MySQL命令
*/


DECLARE @username NVARCHAR(50), 
		@pwd VARCHAR(64), 
		@pwdmd5 VARCHAR(64),
		@sql VARCHAR(2000), 
		@sql2 VARCHAR(2000)
--设置用户名
SET @username = 'hhp'
--设置密码
SET @pwd = '123456'
--对密码进行MD5加密
SET @pwdmd5 = SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5', @pwd)),3,32)

--1.SELECT语句
SELECT *  FROM  OPENQUERY(MySQL, 'select * from hhp_user where chrusername = ''hhp'';');
--或
SELECT * FROM OPENQUERY(MySQL, 'select * from hhp_user') WHERE chrusername = @username

--2.INSERT语句,INTO可省略
INSERT INTO OPENQUERY(MySQL,'select chrusername,chrpwd from hhp_user;')  VALUES( @username , @pwdmd5)

--3.UPDATE语句
SET @pwd = 'hhp'
SET @pwdmd5 = SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5', @pwd)),3,32)
UPDATE OPENQUERY(MySQL, 'select chrusername, chrpwd from hhp_user where chrusername = ''hhp''') SET chrpwd = @pwdmd5

--4.DELETE语句,FROM可省略
DELETE FROM OPENQUERY(MySQL, 'select * from hhp_user where chrusername = ''hhp''')
--或
SET @username = 'ls'
DELETE FROM OPENQUERY(MySQL, 'select * from hhp_user') WHERE chrusername = @username 




版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

使用 链接服务器执行SELECT、UPDATE、INSERT 或 DELETE 及其它命令

当在SQL SERVER中建立好链接服务器之后,我们可以使用下面的方法对远程的数据库进行相关的操作。 假设链接服务器的名称为 Orcl   SELECT:     指明要选择的列的过虑条件,可...

sql server 使用链接服务器远程查询

--PK select * from sys.key_constraints where object_id = OBJECT_ID('TB') --FK select * from sys.fore...

在SQL Server中使用OpenQuery访问其他数据库

OpenQuery 是SQL Server用来与其他Server交互的一种技术, 通过OpenQuery,SQL Server 可以直接访问其他数据库资源。 而其他数据库在OpenQuery 表达...

Oracle OpenQuery 函数对远程表执行 UPDATE、 INSERT, 或 DELETET示例 (不积跬步,无以至千里)

1、对远程表执行 UPDATE、 INSERT, 或 DELETET update openquery(linked1, 'select ssn from testlinked where ssn=...

SQL 中OPENQUERY的使用

OpenQuery 是SQL Server用来与其他Server交互的一种技术,通过OpenQuery,SQL Server 可以直接访问其他数据库资源。 而其他数据库在OpenQuery 表达式中是...

从sql server 到Oracle使用openquery带参数查询

这两天一直在做财务报表的整理、导出,其中大量用到了数据库中计算,又因为集团与子公司用到的数据库不是一个数据库,所以就用到了openquery跨库查询      因为财务报表计算比较复杂,所以这里就举一...

SQL OPENQUERY用法

对给定的链接服务器执行指定的传递查询。该服务器是 OLE DB 数据源。OPENQUERY 可以在查询的 FROM 子句中引用,就好象它是一个表名。OPENQUERY 也可以作为 INSERT、UPD...

SQL SERVER 下 OPENQUERY 的级联查询及更新

注意采用了ODBC方式 EXEC sp_addlinkedserver  @server = 'itgMysql', @srvproduct='MySQL', @provider = 'MSDA...
  • xocom
  • xocom
  • 2015-05-21 10:48
  • 2343

html网页调用本地exe程序的实现方法

最近在做一个项目,要什么网页里调exe。。。开始以为不能实现,后来想想很多就跟淘宝网页上点旺旺一样,还有QQ,迅雷等都是这种。搜了一下解决方法,是添加注册表,自己运行了可以使用。 首先打开注册表,方法...

html 调用客户端exe并写入文本文件

システム起動ページ       function init() {       try {         new ActiveXObje...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)