【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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM