zoukankan      html  css  js  c++  java
  • 【SQL】exec执行sql语句时添加变量并返回结果

    开发过程中,会有跨库查询的需求。

    其中最常见的方式就是通过 数据库名+表名的方式来跨库访问  比如:db_school.dbo.students

    但是这样会留下隐患,测试库和正式库的名字一般来说是不一样的,那么更新的时候一不留神,可能就将测试库的名字保留了下来,更新到了正式环境中

    比较好的一种方式就是在本地库先初始化第三方数据库的表名信息,通过定义变量,查询本地库获取第三方数据库的值

    然后再通过sql拼接的方式  来查询第三方库的结果集,这样只要库基础表信息不错,无论多少次更新都不会出现上面方法的弊端

    具体举例:

    --获取基础数据表费用
    select @base_file_fee = value from db_test.dbo.app_basicdata where [key] = file_fee'

    改造如下:

    --定义第三方数据库
    declare @third_db nvarchar(100)   
    --获取第三方数据库
    select @third_db = value from app_basicdata where [key] = 'DBName'
    
    declare @temp nvarchar(100)  -- 外部变量 
    declare @sql nvarchar(1000) -- 存sql字符串变量 
    set @sql =N'select @temp = value from ' + @third_db + '.dbo.app_basicdata where [key] = ''' + 'file_fee'''  
    print @sql
    EXEC sp_executesql @Sql,N'@temp int output',@temp output 
    select @temp

    PS:注意拼接字符串时单引号的问题

    可以拼接 ' 号

    select * from user where name = '''06'
    
    --其中红色的单引号即表示转义字符,上例中 name的实际条件值为 '06,而不是 ''06

    也可以定义变量来定义 ' 号

    declare @temp nvarchar(1000)
    set @temp = ''''
    print @temp              --打印出来就只有一个'号

    参考:

    https://www.cnblogs.com/volts0302/p/5328739.html

    https://www.cnblogs.com/qiuting/p/8038316.html

  • 相关阅读:
    MS SQL Sever数据库还原
    IIS 7.5 配置伪静态
    黑马程序员-out和ref
    黑马程序员-结构
    黑马程序员-ReadInt
    黑马程序员-hashtable
    黑马程序员-冒泡排序
    黑马程序员-快速排序
    黑马程序员-for和foreach
    黑马程序员-集合和索引器
  • 原文地址:https://www.cnblogs.com/yhnet/p/13863478.html
Copyright © 2011-2022 走看看