SqlServer調用OPENQUERY函數遠程執行增刪改查


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM