2014-06-26 57 views
0

我有這樣的動態查詢備案取

DATABSE 1 的場景插入到表:

ID Person  
1  John 

插入一條記錄之前,我必須確保人已經存在這是handeled在其他分區

數據庫2;

Person Ou 
JOhn  1 
Shyam 2 

數據庫3:

Person Ou 
Ram  5 

....

一旦記錄存在我要插入在該數據庫中相同的記錄。如果什麼都不存在,那麼輸入的錯誤是無效的。

我已經試過這個代碼

Select *, 
     row_number() over(order by name) 'R' 
     into #temp 
from sys.databases 
where database_id not in (1,2,3,4,db_id(db_name())) 

Declare @int i =1 
declare @person varchar(100) = person from inserting (nolock) 
declare @dbname varchar(max) 
Declare @sql nvarchar(max) 
while (@i <= (Select max(R) from #temp)) 
begin 
Set @dbname = (Select name from #temp where R = @i) 

Set @Sql = 'if exists (Select 1 from '''+ @dbname+'''..person where person = +'''@person'''+)' 
execute sp_executesql @sql 
Set @i = (Select max(R) from #temp))+2 
else 
set @i = @i+1 
end 

if @i> (select MAX(R)+1 from #temp) 
begin 
SET @sql = 'insert into ''' [email protected]+'''..person Select ID,person from person' 
execute sp_executesql @sql 
end 
else 
raiserror('No record esxists.',16,1) 

但我仍無法插入即使記錄存在記錄。任何人都可以使這個查詢更好或任何建議是最受歡迎的。

回答

0

可以爲了使用人表從數據庫2和數據庫3

CREATE SYNONYM [dbo].[Person2] FOR [Server2].[Database2].[dbo].[Person] 
CREATE SYNONYM [dbo].[Person3] FOR [Server3].[Database3].[dbo].[Person] 

創建DATABASE2和數據庫3從Person表的同義詞後使用同義詞在數據庫中,PERSON2和Person3可能表現如人表的數據庫1上,您可以插入,更新和刪除行,沒有任何問題。

+0

不僅有兩個數據庫。如果我知道數據庫我確定。我可以簡單地使用synonms,但我不知道有多少數據庫在那裏,如果客戶端請求創建一個新的數據庫,我的查詢應該處理它,這就是我使用sys.databases消除系統和當前數據庫的原因。 – Azar