用于记录提取的动态查询

时间:2014-06-26 05:25:16

标签: sql sql-server sql-server-2008

我有这样的场景

数据库1 插入表格:

ID    Person    
1     John

在插入记录之前,我必须确保已存在已在其他数据库中存储的人员

数据库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 ''' +@dbname+'''..person Select ID,person from person'
execute sp_executesql @sql
end
else
raiserror('No record esxists.',16,1)

但即使记录存在,我仍然无法插入记录。任何人都可以更好地进行此查询,或者欢迎任何建议。

1 个答案:

答案 0 :(得分:0)

您可以在数据库中使用同义词,以便使用数据库2和数据库3中的人员表。

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

在database2和database3上的Person表中创建同义词后,Person2和Person3在Database1上表现为Person表,您可以毫无问题地插入,更新和删除行。