выборка данных из нескольких таблиц без установления связи между этими таблицами

#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