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 
 
相關文章
相關標籤/搜索