перелив данных в таблицах sql

Рейтинг: -1Ответов: 2Опубликовано: 01.02.2023

имеется задача по переливу данных из таблиц mssql в pg

переливаю данные вот так:

INSERT INTO targ_schema."table_name"
SELECT * FROM dest_schema."table_name"

но это ручной вариант, а таблиц оч много (порядка 2000), имена таблиц совпадают

имеется какой-либо вариант "подсунуть" список таблиц и данные записались куда нужно?

Ответы

▲ 1Принят

Вы можете в ms sql запросом из системной таблицы sys.tables получить список таблиц, и даже сразу сформировать 2000+ sql-запросов.

SELECT 'INSERT INTO targ_schema."' + T.name + '" SELECT * FROM dest_schema."' + T.name + '"'
FROM sys.tables T
WHERE …

Условие отсева (WHERE) нужно уточнить в документации https://learn.microsoft.com/ru-ru/sql/relational-databases/system-catalog-views/sys-tables-transact-sql?view=sql-server-ver16 чтоб туда не попадали системные и временные таблицы.

▲ 1
DECLARE @cmd NVARCHAR(MAX) = ''
DECLARE @targ_schema sysname = 'dbo'
DECLARE @dest_schema sysname = 'dbo'

SELECT @cmd += 'INSERT INTO "' + @targ_schema + '"."' + T.name + '" SELECT * FROM "' + @dest_schema + '"."' + T.name + '".' + CHAR(13)
FROM sys.tables AS T
JOIN sys.schemas AS S ON T.schema_id = S.schema_id
WHERE S.name = @dest_schema

EXEC @cmd