Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Новости сайта "Упражнения по SQL" (http://www.sql-ex.ru) 184


Новости сайта "Упражнения по SQL (http://www.sql-ex.ru)" Выпуск 184 (05 апреля 2008 г.)

Новым посетителям сайта

SQL Exercises Сайт посвящен изучению языка, с помощью которого осуществляется взаимодействие с реляционными (и не только) СУБД. Суть обучения состоит в выполнении заданий на написание запросов к учебным базам данных; при этом система контролирует правильность выполнения заданий. В настоящее время реализованы все операторы подъязыка манипуляции данными (DML), которые включают в себя оператор извлечения данных SELECT, а также операторы модификации данных - INSERT, DELETE и UPDATE.

Мы надеемся, что справочного материала сайта окажется достаточно для самостоятельного обучения. Кроме того, свои решения вы можете обсудить на форуме сайта. Опытных же специалистов приглашаем проверить (продемонстрировать) свое мастерство и принять участие в соревновании, обеспечиваемом рейтинговой системой учета времени выполнения заданий. Фактически, рейтинг ведется на втором этапе тестирования, который начинается сейчас после решения 57-ти задач первого этапа. При подсчете рейтинга каждого участника отбрасывается один самый худший показатель среди всех решенных им упражнений.

Демонстрация плана выполнения запроса и сравнительная оценка эффективности решений поможет вам освоить принципы оптимизации запросов, которые пригодятся на третьем рейтинговом этапе, который начинается после 138 задачи.

Имеется возможность получить сертификат по SQL DML при выполнении определенного количества заданий.


Новости сайта

§ iglbeat завершил второй этап (задач 138, время 20.822).

§ Изменения среди лидеров (решенные за неделю задачи третьего этапа):
23. $erges (139, 142)

§ Новые лица в ТОР 100 и вернувшиеся туда:
89. aprog (127, 35.599)
99. zjor (125, 95.555)

§ Продвинулись в рейтинге:
34. avk (137, 64.164)
41. PandNsk (136, 2.257)
75. Чумазик (130, 94.974)

§ Продвижение ближайших претендентов на попадание в ТОР 100:
107. Cергей L (124, 36.906)
117. Чих (122, 34.845)
118. FanOfBeer (123, 121.823)
119. AKudrakov (121, 17.417)
150. DeadLock5 (114, 85.789)
161. shock (111, 8.697)
162. ImKot (111, 10.425)
171. andrij (116, 19.781)

§ На этой неделе сертифицированы:
PandNsk (B08028623) [AR] - г. Новосибирск, Россия
$erges (B08029599) [AR] - г. Новосибирск, Россия
Ho}{0l (A08030339) [BK] - г.Киев, Украина
vitaliiS (A08023771) [BK] - г.Санкт-Петербург, Россия
Istomin (A08030678) [BK] - г.Реутов, МО, Россия

§ Число подписчиков - 3757

Число участников рейтинга - 15378

Число участников второго этапа - 1314

Число участников третьего этапа - 28

Сертифицировано на сайте - 260

Лучшие результаты (ТОР 20)

No Person Number of
Sel_ex
Last_Sel Number of
DML_ex
Scores Days Days_2 Days_3 S_3 LastSolved LastVisit
1 Печатнов В.В. (pvv) 146 146 21 357 127 19.165 6.326 28 23 Feb 2008 04 Apr 2008
2 Креславский О.М. (Arcan) 146 146 21 357 389 22.436 12.553 28 23 Feb 2008 04 Apr 2008
3 Карасёва Н.В. (vlksm) 146 146 21 357 667 64.764 38.288 28 03 Mar 2008 04 Apr 2008
4 Любченко В.А. (IAS56) 146 146 21 357 552 403.414 373.617 28 09 Mar 2008 03 Apr 2008
5 Держальцев В.А. (MadVet) 145 145 21 354 1064 57.441 25.129 25 15 Mar 2008 01 Apr 2008
6 Голубин Р.С. (Roman S. Golubin) 145 145 21 354 919 92.541 58.822 25 23 Feb 2008 04 Apr 2008
7 Мурашкин И.В. (lepton) 144 144 21 350 734 37.129 26.815 21 26 Mar 2008 27 Mar 2008
8 Белогурова К. (Katy_Ekb) 143 11 21 347 287 10.733 4.673 18 07 Mar 2008 19 Mar 2008
9 Войнов П.Е. (pаparome) 143 146 21 346 916 3.013 .213 17 26 Feb 2008 28 Mar 2008
10 Северюхин Ю.А. (Venser) 140 142 21 339 335 4.930 .655 14 01 Feb 2008 04 Feb 2008
11 Тарасов Д.Б. (Gavrila) 141 142 21 340 914 23.390 2.501 14 26 Feb 2008 04 Apr 2008
12 Солдатенков Ю.С. (SolYUtor) 139 142 21 338 490 17.852 2.695 14 20 Sep 2007 05 Apr 2008
13 Кувалкин К.С. (Cyrilus) 141 142 21 340 1207 13.042 2.782 14 15 Mar 2008 03 Apr 2008
14 Шептунов П.П. (Dzen) 139 142 21 338 279 8.130 3.499 14 02 Oct 2007 15 Nov 2007
15 Селезнёв А.С. (Артём С.) 142 141 21 343 127 15.597 4.279 14 14 Mar 2008 31 Mar 2008
16 Мальцев А.В. (Палкин) 139 142 21 338 422 48.788 7.690 14 13 Oct 2007 20 Jan 2008
17 Васьков Е.В. (Johan) 141 12 21 340 611 14.323 12.767 14 21 Mar 2008 22 Mar 2008
18 Бураков С.Г. (burakov58) 139 142 21 338 974 51.701 19.814 14 30 Sep 2007 09 Nov 2007
19 Валуев Д.И. (Fiolent) 142 142 21 343 1638 188.425 131.545 14 28 Feb 2008 04 Apr 2008
20 Агапов В. (KERBEROS) 132 141 20 322 89 6.140 1.262 11 20 Nov 2006 19 Mar 2008

Лучшие результаты за неделю

No surname n_sel sel_all sel_scores dml_scores scores rating last_visit
1 Махнёв Д. (dmk) 52 52 96 0 96 1725 03 Apr 2008
2 larouche (j larouche) 40 40 74 15 89 1986 04 Apr 2008
3 Фролов П. (ProstoTak) 34 41 69 6 75 1336 04 Apr 2008
4 Goppen D. (Homo Ignavus) 27 27 51 17 68 2790 04 Apr 2008
5 Разинков (air_Vlad) 27 49 65 0 65 1702 04 Apr 2008
6 tionit (AVKon) 29 40 64 0 64 2413 04 Apr 2008
7 Benedichuk V. (BVA) 30 30 64 0 64 3038 04 Apr 2008
8 Скоблев А.Д. (bugoga) 33 33 64 0 64 3040 01 Apr 2008
9 Хренникова И.С. (IHrennikova) 27 40 62 0 62 2387 04 Apr 2008
10 Бородай С.В. (Fortop) 33 33 62 0 62 3151 04 Apr 2008
11 Marshak (Marshakk) 32 32 58 0 58 3437 01 Apr 2008
12 Субхангулов А.М. (slash_nk) 27 33 55 0 55 3241 03 Apr 2008
13 sergslayer (serg_slayer) 29 29 55 0 55 3686 04 Apr 2008
14 >M (arsenium) 23 35 53 0 53 2764 04 Apr 2008
15 Romanov A.V. (LexusSaD) 24 96 52 0 52 220 04 Apr 2008
16 >Юрков (Ozymandias) 30 30 52 0 52 3965 04 Apr 2008
17 Максаров М.И. (MIchail_1982) 28 28 52 0 52 3971 02 Apr 2008
18 Makovetsky E. (mephisto) 26 26 43 9 52 3992 04 Apr 2008
19 Маслов Д.А. (bc.) 28 28 51 0 51 4125 04 Apr 2008
20 Moreno (deckard) 7 55 16 34 50 833 03 Apr 2008
21 Osbourne O.W. (Ozzy) 26 57 50 0 50 1368 02 Apr 2008
22 Разувае А.С. (merderface) 27 27 50 0 50 4194 03 Apr 2008

Изучаем SQL

Массовая закачка данных в SQL Server

Tim Chapman (оригинал: Bulk importing data into SQL Server )
Перевод Моисеенко С.И.

Если Вы работаете с базами данных, то рано или поздно вам придется иметь дело со вставкой данных в SQL Server из внешних файлов данных. Это руководство покажет, как импортировать данные с помощью команды BULK INSERT, и объяснит, как изменение некоторых ее опций поможет более эффективно добавлять данные.

BULK INSERT

BULK INSERT - команда TSQL, используемая в SQL Server, чтобы загрузить внешний файл в таблицу базы данных, используя указанный формат. Она дает разработчику возможность импортировать данные непосредственно в таблицы базы данных без использования внешних программ, таких как Integration Services. Хотя BULK INSERT не предполагает никакой сложной логики или преобразований, она действительно имеет полезные опции для форматирования данных при выполнении импорта. Единственное ограничение BULK INSERT состоит в том, что эта команда используется для вставки данных только в SQL Server.

Вставка данных

Следующий пример даст Вам лучшее представление о том, как использовать команду BULK INSERT. Сначала, я создам таблицу SalesHistory; это та таблица, в которую я вставляю данные из текстового файла.

 

CREATE TABLE [dbo].[SalesHistory]
 (
         [SaleID] [int],
         [Product] [varchar](10) NULL,
         [SaleDate] [datetime] NULL,
         [SalePrice] [money] NULL
 )

 

BULK INSERT используется для вставки данных в таблицу базы данных, при этом триггеры на данной таблице не будут срабатывать по умолчанию. Это удобно, поскольку триггеры замедляют процесс импорта.

В следующем примере я создаю триггер на таблице SalesHistory, который печатает число записей, вставляемых в таблицу.

 

CREATE TRIGGER tr_SalesHistory
 ON SalesHistory
 FOR INSERT
 AS
 BEGIN
         PRINT CAST(@@ROWCOUNT AS VARCHAR(5)) + ' rows Inserted.'
 END

 

Файл, который я использую для вставки данных, является текстовым файлом, в котором значения разделяются запятыми. В этом файле находится 1,000 записей, и поля в нем соответствуют полям таблицы SalesHistory, которую я только что создал.

Этот скрипт использует BULK INSERT для вставки данных из текстовой таблицы SalesHistoryText в таблицу базы данных SalesHistory. Поскольку значения в текстовом файле разделяются запятыми, все, что мне необходимо задать для вставки данных, это разделитель полей. Обратите внимание, что созданный мной триггер не будет срабатывать при выполнении данного оператора:

 

BULK INSERT SalesHistory FROM 'c:SalesHistoryText.txt' WITH (FIELDTERMINATOR = ',')

 

Иногда необходимо запускать триггеры, импортируя большой набор данных. Следующий скрипт использует опцию FIRE_TRIGGERS, который указывает, что любые триггеры на рассматриваемой таблице должны срабатывать:

 

BULK INSERT SalesHistory FROM 'c:SalesHistoryText.txt' WITH (FIELDTERMINATOR = ',', FIRE_TRIGGERS)

 

Вы можете использовать команду BATCHSIZE, чтобы задать количество записей, которое будет вставлено в таблицу за одну транзакцию. В предыдущем примере, все 1 000 записей были вставлены в таблицу в одной транзакции. В следующем примере я установил BATCHSIZE в значение 2, что означает, что 500 отдельных транзакций будут зафиксированы на таблице. Это также означает, что триггер сработает 500 раз и, таким образом, печать на экран будет выводиться 500 раз.

 

BULK INSERT SalesHistory FROM 'c:SalesHistoryText.txt' WITH (FIELDTERMINATOR = ',', FIRE_TRIGGERS, BATCHSIZE = 2)

 

BULK INSERT не ограничивается в SQL Server 2005 лишь локальными дисководами. Следующий оператор показывает, как вы можете импортировать данные из файла SalesHistoryText, находящегося на диске D сервера с именем FileServer.

 

BULK INSERT SalesHistory FROM 'FileServerD$SalesHistoryText.txt' WITH (FIELDTERMINATOR = ',')

 

Иногда полезно просмотреть данные, которые вы импортируете, прежде чем зафиксировать их в таблице базы данных. Следующий оператор использует функцию OPENROWSET совместно с командой BULK для чтения данных из текстового файла. Этот оператор также использует файл формата (см. ниже), который показывает, как форматируются данные в текстовом файле.

 

    SELECT *
       FROM  OPENROWSET(BULK  'c:SalesHistoryText.txt' ,
       FORMATFILE='C:SalesHistoryFormat.Xml'
       ) AS mytable;
 GO

 

Файл формата <?xml version="1.0" ?> - <BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <RECORD> <FIELD ID="1" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="12" /> <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="10" COLLATION="SQL_Latin1_General_CP1_CI_AS" /> <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="30" /> <FIELD ID="4" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="30" COLLATION="SQL_Latin1_General_CP1_CI_AS" /> </RECORD> - <ROW> <COLUMN SOURCE="1" NAME="SaleID" xsi:type="SQLINT" /> <COLUMN SOURCE="2" NAME="Product" xsi:type="SQLVARYCHAR" /> <COLUMN SOURCE="3" NAME="SaleDatesDog" xsi:type="SQLVARYCHAR" /> <COLUMN SOURCE="4" NAME="Price" xsi:type="SQLVARYCHAR" /> </ROW> </BCPFORMAT>

Программа Bulk Copy

В своей следующей колонке я представлю программную утилиту Bulk Copy (bcp), которую вы можете использовать для вставки и экспорта данных из SQL Server.

24-03-2008

Полезная информация

§ Все статьи, публикуемые в рассылке, затем выкладываются на сайте Книги и статьи по SQL.

§ Желающих поспособствовать популяризации сайта прошу проголосовать/поставить закладку в социальных сетях:
del.icio.us
dzone.com
Digg.com
stumbleupon.com

Контакты

По всем вопросам, связанным с функционированием сайта, проблемами при решении упражнений, идеями вы можете обращаться к Сергею И.Моисеенко msi77[@]yandex.ru. Вы также можете предложить свои задачи для публикации на сайте.

Подписка Subscribe.Ru
Новости сайта "Упражнения по SQL"

В избранное