#sql #sql-server #sql-server-2005
#sql #sql-сервер #sql-server-2005
Вопрос:
За каждую неделю у меня есть таблица Excel, преобразованная в базу данных SQL, эта таблица Excel предоставила мне 30 таблиц ссылок с одинаковой структурой и определением полей, но между этими таблицами нет связи.
Итак, я хочу объединить данные из этих 30 таблиц в одну таблицу, я пытаюсь написать T-sql для этого, но мне не удается с помощью using INFORMATION_SCHEMA.Tables
или sys.tables
получить имена таблиц и продолжить выборку данных из этих таблиц в одном запросе.
Ответ №1:
Для объединения таблиц вместе с точно такой же схемой:
SELECT * FROM Table1
UNION
SELECT * FROM Table2
Если вся ваша база данных состоит из этих таблиц, вы должны иметь возможность использовать sp_msforeachtable
процедуру.
CREATE TABLE #TempTable (Col1 INT, Col2 NVARCHAR(50))
sp_msforeachtable 'INSERT INTO #TempTable (Col1 , Col2) SELECT Col1 , Col2 FROM ?'
SELECT * FROM #TempTable
DROP TABLE #TempTable
Комментарии:
1. Существует встроенная хранимая процедура,
sp_MSforeachtable
, которая позволит вам просматривать все таблицы и выполнять сброс во временную таблицу. Однако это выборочно, поэтому он будет обрабатывать ВСЕ таблицы в БД.2. извините, что беспокою вас, Дастин, Но я новичок в этом sp, поэтому не могли бы вы показать мне, как я могу использовать этот sp
3. EXEC sp_MSforeachtable ‘ВСТАВИТЬ в новую таблицу ВЫБЕРИТЕ «?», FROM?’ это правильно
4. Привет, Дастин, я беру ваш запрос и редактирую его, чтобы точно определить, что я хочу, в моей базе данных, чтобы он стал таким (СОЗДАТЬ ТАБЛИЦУ #TempTable ([f2] bigint, [f3] NVARCHAR (255), [f4] NVARCHAR (255), [f5] NVARCHAR(255)) exec sp_msforeachtable ‘ВСТАВИТЬ В #TempTable (f1, f2, f3, f4, f5) ВЫБЕРИТЕ f1, f2, f3, f4,f5 ОТКУДА?’ ВЫБРАТЬ * ИЗ #TempTable УДАЛИТЬ ТАБЛИЦУ #TempTable), но возвращает ошибку недопустимое имя поля f1