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

由于业务需求,我的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 




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值