#sql #sql-server #sql-server-2008
#sql #sql-сервер #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:
Вы можете использовать синонимы в своей базе данных, чтобы использовать таблицу person из базы данных 2 и базы данных 3.
CREATE SYNONYM [dbo].[Person2] FOR [Server2].[Database2].[dbo].[Person]
CREATE SYNONYM [dbo].[Person3] FOR [Server3].[Database3].[dbo].[Person]
После создания ваших синонимов из таблицы Person в database2 и database3, Person2 и Person3 ведут себя как таблица Person в Database1, и вы можете вставлять, обновлять и удалять строки из них без каких-либо проблем.
Комментарии:
1. Существует не только две базы данных . Если я знаю базы данных, я согласен с этим. Я могу просто использовать синонимы, но я не уверен, сколько существует БД, а также, если клиент запрашивает создание новой БД, и мой запрос должен ее обработать, поэтому я использовал sys.databases, исключающий систему и текущую БД.