我有这样的场景
数据库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)
但即使记录存在,我仍然无法插入记录。任何人都可以更好地进行此查询,或者欢迎任何建议。
答案 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表,您可以毫无问题地插入,更新和删除行。