/* 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