【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

原文地址:https://www.cnblogs.com/yhnet/p/13863478.html