我正在使用SQL Server 2008。將表值參數傳遞到跨不同數據庫的存儲過程
如何傳遞表值參數的存儲過程跨越不同的數據庫,但同一臺服務器?
我應該在兩個數據庫中創建相同的表類型嗎?
請根據問題舉例或鏈接。
感謝您的任何幫助。
我正在使用SQL Server 2008。將表值參數傳遞到跨不同數據庫的存儲過程
如何傳遞表值參數的存儲過程跨越不同的數據庫,但同一臺服務器?
我應該在兩個數據庫中創建相同的表類型嗎?
請根據問題舉例或鏈接。
感謝您的任何幫助。
在迴應此評論(如果我是正確的,並且使用數據庫之間的臺灣居民入境許可證是不可能的):
我在這種情況下,有什麼選擇呢?使用XML類型?
純粹的方法就是說,如果兩個數據庫都使用相同的數據,它們應該被合併到一個數據庫中。實用主義者意識到這並非總是可行的 - 但是既然你明顯可以改變調用者和被調用者,也許只需使用一個臨時表,這兩個存儲過程都知道。
我不相信這是可能的 - 你不能從其它數據庫中的表型,甚至與兩個數據塊相同的類型定義,一個類型的值不能分配到其他。
你不通數據庫之間的臨時表。臨時表總是存儲在tempdb中,只要連接處於打開狀態且臨時表未被刪除,就可以訪問您的連接。
所以,你在調用者創建臨時表:
CREATE TABLE #Values (ID int not null,ColA varchar(10) not null)
INSERT INTO #Values (ID,ColA)
/* Whatever you do to populate the table */
EXEC OtherDB..OtherProc
然後在被叫:
CREATE PROCEDURE OtherProc
/* No parameter passed */
AS
SELECT * from #Values
表UDT只對同一個數據庫中的存儲過程有效。
所以,你必須在每臺服務器上創建類型,並在存儲的特效庫中引用它。只需在兩個DB http://msdn.microsoft.com/en-us/library/bb510489.aspx中運行此示例的第一部分即可。
如果您不需要效率,您可以隨時使用其他方法 - 即傳遞xml文檔參數或使用s.p.期望一個包含輸入數據的臨時表。
編輯:添加例如
create database Test1
create database Test2
go
use Test1
create type PersonalMessage as TABLE
(Message varchar(50))
go
create proc InsertPersonalMessage @Message PersonalMessage READONLY AS
select * from @Message
go
use Test2
create type PersonalMessage as TABLE
(Message varchar(50))
go
create proc InsertPersonalMessage @Message PersonalMessage READONLY AS
select * from @Message
go
use Test1
declare @mymsg PersonalMessage
insert @mymsg select 'oh noes'
exec InsertPersonalMessage @mymsg
go
use Test2
declare @mymsg2 PersonalMessage
insert @mymsg2 select 'oh noes'
exec InsertPersonalMessage @mymsg2
缺點是,有數據的兩個副本。 但是你可以同時對每個數據庫運行批處理。 這是否比使用表格有什麼更好的事實上都取決於你有什麼處理/數據大小 - 順便說一下,使用s.p.的臨時表。你只需從s.p中訪問它。代碼(如果不存在則失敗)。
我不相信這是可能的 - 你不能引用表型來自另一個數據庫,甚至在兩個數據庫中都有相同的類型定義時,一種類型的值不能分配給另一個。 – 2012-03-02 10:55:26
在這種情況下我有什麼選擇?使用XML類型? – hgulyan 2012-03-02 10:58:19