• 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 
     
  • 相关阅读:
    深入理解Java容器——HashMap
    深入理解Java并发容器——ConcurrentHashMap
    String、StringBuilder和StringBuffer的比较
    接口类、抽象类和普通类的区别
    跟我一起学算法——二项堆
    跟我一起学算法——分治法
    跟我一起学算法——动态规划
    跟我一起学算法——斐波那契堆
    Redis操作三部曲:SpringBoot2.0.X集成Redis + Redis分布式锁 + RedisCacheManager配置
    SpringBoot使用Redis做集中式缓存
  • 原文地址:https://www.cnblogs.com/lgx5/p/11691514.html
Copyright © 2020-2023  润新知