Загрузка базы данных
Переходные таблицы
Переходные таблицы – это временные таблицы, которые вы создаете для загрузки данных в SQL Server, для обработки и манипулирования этими данными, а также для копирования этих данных в соответствующую таблицу или таблицы в базе данных. В этом разделе вы узнаете, как и когда использовать переходные таблицы.
Основы использования переходных таблиц
Переходная таблица – это временная область хранения базы данных, в которую вы можете копировать данные. Затем вы можете использовать T-SQL для преобразования данных в нужный формат путем выполнения таких операций, как операции объединения, использующие переходную таблицу и существующие таблицы.
Возможность обработки данных во время процесса загрузки в переходные таблицы позволяет вам обходить определенные ограничения методов загрузки данных. Большинство методов загрузки данных позволяют вам только копировать данные в базу данных без какой-либо обработки. Используя DTS, вы можете выполнять некоторые преобразования данных, но не можете вносить изменения, основываясь на данных, содержащихся в базе данных. Главным преимуществом использования переходных таблиц является то, что вы получаете возможность выполнения операций объединения (слияния), используя при этом информацию, содержащуюся в самой переходной таблице или в существующих таблицах.
Использование переходных таблиц
В этом разделе мы рассмотрим три примера использования переходных таблиц: слияние и загрузка таблицы, загрузка и разбиение таблицы, а также загрузка уникальных значений в таблицу. Эти примеры помогут вам понять, какие преимущества переходных таблиц вы можете использовать при загрузке данных в вашу базу данных.
Слияние и загрузка таблицы
Рассмотрим таблицу "рынка" данных (data mart), которая является комбинацией двух таблиц из систем оперативной обработки транзакций (OLTP). Эта таблица содержит колонки A, B, C, D и E; колонки A, B и C существуют в одной таблице и колонки C, D и E – в другой таблице. Обе входные таблицы можно сделать переходными, а для загрузки общей таблицы в рынок данных можно использовать операцию слияния (рис. 24.22).
Загрузка и разбиение таблицы
Следствием нашего первого примера является сценарий, при котором одна таблица загружается в несколько таблиц рынка данных, что может потребоваться в целях упорядочивания. Эту задачу можно легко выполнить путем копирования данных в переходную таблицу и использования двух запросов для загрузки переходной таблицы в таблицы рынка данных (рис. 24.23).
Загрузка уникальных значений в таблицу
Вы можете загружать уникальные значения в таблицу путем массового копирования данных для загрузки в переходную таблицу и последующего использования оператора T-SQL для вставки данных в основную таблицу, только если этих данных еще нет в таблице. Эта возможность полезна в тех случаях, когда вы загружаете данные, которые могут нарушать некоторые деловые правила. Для копирования уникальных значений из переходной таблицы используйте оператор NOT IN, как это показано ниже:
INSERT INTO table ( columnA, columnB ) SELECT columnA, columnB FROM staging_table WHERE columnA NOT IN ( SELECT columnA FROM table )
Этот несколько усложненный оператор SQL просто загружает из переходной таблицы в основную таблицу строки, которые содержат в колонке columnA значение, не совпадающее со значением той же колонки в основной таблице, что позволяет избежать вставки дублированных значений.
Оператор SELECT...INTO
Использование оператора SELECT...INTO на самом деле не является методом загрузки базы данных; это способ создания новых таблиц из существующих таблиц или переходных таблиц. Оператор SELECT...INTO нельзя использовать для заполнения существующей таблицы.

Примечание. Чтобы можно было использовать оператор SELECT...INTO, для параметра базы данных select into/bulkcopy должно быть задано значение TRUE. Чтобы задать этот параметр, используйте следующий оператор T-SQL:
exec sp_dboption <имя_базы_данных>, "select into/bulkcopy", TRUE
Ниже приводится синтаксис оператора SELECT...INTO:
SELECT <список_колонок> INTO <имя_новой_таблицы> <предложение_для_select>
Переменная предложение_для_select указывает операторы, которые обычно уточняют оператор SELECT, такие как FROM и WHERE. Оператор SELECT...INTO легко использовать, как показано в следующем примере:
exec sp_dboption "example", "select into/bulkcopy", TRUE GO SELECT order_id, contact_id, item_id, item_description, amount INTO newsales FROM stage GO exec sp_dboption "example", "select into/bulkcopy", FALSE GO
В данном случае указана база данных "example" и создаваемая таблица newsales. Данные извлекаются из таблицы stage.
Заключение
В этой главе вы узнали, как загружать базу данных SQL Server с помощью программы BCP, оператора BULK INSERT и средств DTS. Вы также ознакомились с переходными таблицами, которые удобно использовать при определенных условиях. И вы узнали, как использовать оператор SELECT...INTO. Эти средства и методы, несомненно, помогут вам, поскольку загрузка базы данных является одной из основных задач для DBA. В "Службы компонентов и Microsoft Distributed Transaction Coordinator" вы узнаете о компонентах Distributed Transaction Coordinator и Microsoft Transaction Server.