перелив данных в таблицах sql
имеется задача по переливу данных из таблиц mssql в pg
переливаю данные вот так:
INSERT INTO targ_schema."table_name"
SELECT * FROM dest_schema."table_name"
но это ручной вариант, а таблиц оч много (порядка 2000), имена таблиц совпадают
имеется какой-либо вариант "подсунуть" список таблиц и данные записались куда нужно?
Ответы (2 шт):
Автор решения: Vitaliy Zlobin
→ Ссылка
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
Автор решения: Герман Борисов
→ Ссылка
Вы можете в 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 чтоб туда не попадали системные и временные таблицы.