2011-01-28 56 views
0

我想在存儲過程 的不同數據庫中的2個表中的行中求和,並返回結果。如何在TSQL中添加2個不同數據庫選擇的結果?

我會傳入數據庫的名稱,另一個將是當前的數據庫。

假定該表稱爲PayrollLedgers且字段爲PLAmount。傳入的數據庫名稱是tbr0910。而且我想通過傳遞給sp的PLEmpID過濾兩個表。

你能爲此提供TSQL嗎? 我確實有TSQL的經驗,但這讓我難堪。

+0

即使這可能工作;這太可怕了。 /關閉。 – stefan 2011-01-28 03:18:41

回答

2

您需要爲此使用動態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 
+0

嗨,謝謝,但我得到這個錯誤'最大'附近的語法不正確 – Malcolm 2011-01-28 03:21:43

0

你能做到這三方式

1)由cyberkiwi提供的動態SQL方法

2)假定SQL 2005或更高版本創建Synonym,然後改變同義詞,當你需要(這裏有併發問題,所以你必須要小心)

3)呼叫的兩個和一個在每個兩數據源,然後將它們一起添加到您的客戶端。這可能是最明智的方法,因爲它通常很容易改變SQL連接字符串,但不能回答你的問題。

相關問題