Выберите столбцы через различные базы данных

Использовать триггеры

Создать SQL Server & amp; Таблицы Postgresql:

-- SQL Server
create table test (id int identity(1,1) not null primary key, name varchar(25), description varchar(1000))
go

-- Postgresql:
CREATE TABLE public.test
(
    id integer,
    name character varying(25) COLLATE pg_catalog."default",
    description character varying(1000) COLLATE pg_catalog."default"
)

Создайте связанный сервер в SQL Server с вашим сервером Postgresql.

Затем создайте триггеры в своей таблице SQL Server:

create trigger iu_trigger_name on test
after insert, update
as 
begin
    UPDATE [SQLAuth_PG].[DefaultDB].[public].[test]
    SET name = t.name, description = t.description
    FROM [SQLAuth_PG].[DefaultDB].[public].[test] p
    INNER JOIN inserted t ON p.id = t.id

    INSERT INTO [SQLAuth_PG].[DefaultDB].[public].[test]
           ([id]
           ,[name]
           ,[description])
    SELECT t.id, t.name, t.description
    FROM inserted t
    WHERE NOT EXISTS (
        SELECT * FROM [SQLAuth_PG].[DefaultDB].[public].[test] 
        WHERE id = t.id
    )
end
go

create trigger d_trigger_name on test
after delete 
as
begin
    delete p
    FROM [SQLAuth_PG].[DefaultDB].[public].[test] p
    inner join deleted d on p.id = d.id
end
go

Тест:

insert into test (name, description) select 'Name1', 'Name 1 description'
go

select * from [SQLAuth_PG].[DefaultDB].[public].[test]

--output
--id    name    description
--1 Name1   Name 1 description

update test set description = 'Updated description!' where name = 'Name1'
go

select * from [SQLAuth_PG].[DefaultDB].[public].[test]

-- output
--id    name    description
--1 Name1   Updated description!

delete from test
go

select * from [SQLAuth_PG].[DefaultDB].[public].[test]
go

-- postgresql table is empty

Триггер в этом примере обрабатывает пакет вставки и обновления. Это единственная настоящая ошибка с триггерами - при условии, что в «вставленной» таблице есть только одна запись. После массовой вставки или обновления вставленная таблица заполняется всеми новыми / измененными записями.

48
задан Graviton 23 March 2009 в 06:32
поделиться

2 ответа

Вы указали бы базу данных при помощи синтаксиса databasename.tablename

Пример:

SELECT 
    mydatabase1.tblUsers.UserID, 
    mydatabse2.tblUsers.UserID
FROM 
   mydatabase1.tblUsers
       INNER JOIN mydatabase2.tblUsers 
           ON mydatabase1.tblUsers.UserID = mydatabase2.tblUsers.UserID
75
ответ дан TheTXI 7 November 2019 в 12:32
поделиться

Можно выбрать из любой другой таблицы с оператором JOIN и использующий этот тип синтаксиса.

SELECT A.*, B.* FROM db1.table1 A LEFT JOIN db2.table1 B ON A.id = B.id
7
ответ дан Ólafur Waage 7 November 2019 в 12:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: