開發過程中,會有跨庫查詢的需求。
其中最常見的方式就是通過 數據庫名+表名的方式來跨庫訪問 比如: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