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

news/2024/5/17 16:30:55

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

 

 

 

REFS:http://blog.csdn.net/u012143455/article/details/49929137


http://www.niftyadmin.cn/n/4235221.html

相关文章

INT 10H功能介绍

INT 10H 是由 BIOS 对屏幕及显示器所提供的服务程序,而后倚天公司针对倚天中文提供了许多服务程序,这些服务程序也加挂在 INT 10H 内。使用 INT 10H 中断服务程序时,先指定 AH 寄存器为下表编号其中之一,该编号表示欲调用的功用&a…

SQL Server中的limit

在mysql中可以直接使用limit,在sql server中则不行,需要使用TOP,例如top 10 转载于:https://blog.51cto.com/bbtao/922467

更新的想法

全部更新的话,可以query-copy-delete-insert(查询DB记录,将新的非null{保持有DB的隐藏字段值}拷贝过来,删除DB的,insert合并后的记录--如果主键是数据库自动生成的会冲突,因为待插的记录里有主键)。 若hibernate&#…

图解虚拟机VMware服务自动启动

昨天是在VMware中使用crontab时间排程表在晚上12点定时关机,现在说说如何实现虚拟机开机自动启动,让cacti在centos的虚拟机随主机地起启动,可以说是实现公司服务器正常运行的一个不可或缺的环节。停电了机器重启有时不可能人不在或不记得了监…

智能补货 (在途、现有库存、安全库存) 的思路

按我的那个,在途库存就查我新建的表need_num字段。按他那个,多个调度单里的在途库存加起来(可以查在途SQL里根据门店、SKU分组,求出在途的和)作为一个整体在途,加现有的库存若小于安全则插入我的表里表示调…

SQL Server 2008与Oracle Database 11g相比较

数据仓库魔力象限 SQL Server是位于甘特的数据仓库魔力象限领导者象限。甘特强调SQL Server在数据仓库方面的使用越来越多,Microsoft提供了很高的性价比,SQL Server的升级并不需要很多工作量,而且Microsoft的全球支持是非常广泛的。 甘特批评…

left join 过滤条件要另写where

如图,如果想过滤条件必须在后面加where,如果跟着on后面加and ,结果集不会变、达不到过滤目的

cp专题(2)-安装带有自己安全平台的cp

安全前需要考虑的问题有两点 1。确定当前OS没有不必要的服务(对于不是安全平台的其他系统而言) 2。确定物理网卡数量和序列 本次的安装模拟环境是在虚拟机下安装,安装镜像请自行网上搜索 下面主…