开发过程中,会有跨库查询的需求。
其中最常见的方式就是通过 数据库名+表名的方式来跨库访问 比如: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 --打印出来就只有一个'号
参考: