Здравствуйте! Помогите решить проблему.
У меня 70 таблиц (каждая таблица относится к одному магазину). Всего 70 магазинов. В каждой из них есть следующие поля: код товара, название товара, количество товара, цена и т.д. Мне необходимо написать процедуру, которая будет объединять все таблицы, чтобы можно было сделать запрос, например, выводящий все товары из всех таблиц и их цены.
Я могу, конечно, соединить их все через UNION, но я бы предпочёл запрос с использованием списка всех таблиц, что-то вроде этого:
SELECT название товара, цена FROM (
SELECT name FROM sys.tables
WHERE name LIKE '...%' OR name LIKE '...%' ...)
Как, в принципе, работать с таким большим количеством таблиц?
Заранее благодарю за помощь!
Я уже написал классический запрос с помощью большого количества UNION. Такая длинная простыня получилась, что аж сердце кровью обливается.... Очень хочется автоматизировать этот процесс, так как количество таблиц постоянно растёт.
DECLARE @sql AS nvarchar(max);
DECLARE @tbl AS sysname;
DECLARE c CURSOR FOR
SELECT name
FROM sys.tables
WHERE type = 'U';
OPEN c;
FETCH NEXT FROM c INTO @tbl;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql = COALESCE(@sql, N'') + IIF(@sql IS NULL, N'', N' UNION ALL ') + N'SELECT col1, col2, col3 FROM ' + @tbl;
FETCH NEXT FROM c INTO @tbl;
END
CLOSE c;
DEALLOCATE c;
PRINT @sql;
EXEC (@sql);
не учитывает, как минимум, что таблицы могут быть в разных схемах, и что имена могут содержать нестандартные символы