我想在存儲過程 的不同數據庫中的2個表中的行中求和,並返回結果。如何在TSQL中添加2個不同數據庫選擇的結果?
我會傳入數據庫的名稱,另一個將是當前的數據庫。
假定該表稱爲PayrollLedgers且字段爲PLAmount。傳入的數據庫名稱是tbr0910。而且我想通過傳遞給sp的PLEmpID過濾兩個表。
你能爲此提供TSQL嗎? 我確實有TSQL的經驗,但這讓我難堪。
我想在存儲過程 的不同數據庫中的2個表中的行中求和,並返回結果。如何在TSQL中添加2個不同數據庫選擇的結果?
我會傳入數據庫的名稱,另一個將是當前的數據庫。
假定該表稱爲PayrollLedgers且字段爲PLAmount。傳入的數據庫名稱是tbr0910。而且我想通過傳遞給sp的PLEmpID過濾兩個表。
你能爲此提供TSQL嗎? 我確實有TSQL的經驗,但這讓我難堪。
您需要爲此使用動態SQL。生成SQL語句並使用sp_executesql運行它。
CREATE proc getsomevalue
@otherdbname sysname,
@PLEmpID int
as
declare @sql nvarchar(4000) -- this is a short statement, max is not needed
set @sql = '
select @result =
(select isnull(sum(PLAmount),0) from PayrollLedgers
where [email protected])
+
(select isnull(sum(PLAmount),0) from ['[email protected]+']..PayrollLedgers
where [email protected])'
declare @sum float
exec sp_executesql @sql, N'@PLEmpID int,@result float output', @PLEmpID, @sum output
select @sum
GO
複製這一使用完全相同的對象名稱所示,在tempdb中創建它,然後用
use tempdb
exec getsomevalue 'tbr0910', 1
運行它創建以下後對象
create database tbr0910
GO
use tbr0910
create table PayrollLedgers(PLEmpID int, PLAmount int)
insert PayrollLedgers select 1,2
insert PayrollLedgers select 1,4
insert PayrollLedgers select 3,4
GO
use tempdb
create table PayrollLedgers(PLEmpID int, PLAmount int)
insert PayrollLedgers select 1,2
insert PayrollLedgers select 1,4
insert PayrollLedgers select 3,4
嗨,謝謝,但我得到這個錯誤'最大'附近的語法不正確 – Malcolm 2011-01-28 03:21:43
你能做到這三方式
1)由cyberkiwi提供的動態SQL方法
2)假定SQL 2005或更高版本創建Synonym,然後改變同義詞,當你需要(這裏有併發問題,所以你必須要小心)
3)呼叫的兩個和一個在每個兩數據源,然後將它們一起添加到您的客戶端。這可能是最明智的方法,因爲它通常很容易改變SQL連接字符串,但不能回答你的問題。
即使這可能工作;這太可怕了。 /關閉。 – stefan 2011-01-28 03:18:41