В этой лекции вы познакомитесь с основными понятиями языков SQL (Structured
SQL – это язык программирования и запросов к базам данных, он применяется для осуществления доступа к данным, для запросов к реляционным СУБД, для управления базами данных и их обновления. Стандарт SQL утвержден как Американским Национальным Институтом Стандартов (ANSI, American National Standards Institute), так и Международной организацией по стандартизации (ISO, International Organization for Standardization). ANSI – это организация промышленных и деловых групп, разрабатывающая стандарты для торговли и коммуникации в Соединенных Штатах. ANSI также является членом ISO и IEC (Международной электротехнической комиссии, International
Язык SQL содержит операторы, относящиеся к одному из двух основных языков программирования в составе SQL:
Язык DDL (CREATE, ALTER и DROP для каждого из объектов, с которым производится работа. Например, для первоначального создания таблицы, для изменения ее свойств (скажем, для создания или для удаления колонок) и для уничтожения таблицы соответственно применяются операторы CREATE TABLE, и DROP TABLE ; мы расскажем об этих операторах в нескольких следующих разделах.
Давайте в качестве примера применим CREATE TABLE. Наша таблица-пример будет задана как имеющая четыре колонки, при помощи следующих операторов:
Use MyDB CREATE TABLE Customer_Data (customer_id smallint, first_name char(20), last_name char(20), phone char(10)) GO
Эти операторы создают структуру таблицы Customer_Data. Таблица Customer_Data останется пустой до тех пор, пока в нее не будут введены данные или она не будет заполнена при помощи массового копирования. (Более подробно о создании таблиц см. лекцию 10.)
Оператор применяется для изменения определения или атрибутов таблицы. В нашем примере оператор применяется для добавления в существующую таблицу Customer_Data колонки middle_initial:
ALTER TABLE Customer_Data ADD middle_initial char(1) GO
Теперь определение таблицы содержит не четыре колонки, как было первоначально, а пять колонок. (Более подробно о применении оператора см. лекцию 15.)
Оператор DROP TABLE применяется для уничтожения определений таблиц и всех данных, индексов, триггеров, ограничений и специальных разрешений, относящихся к удаляемым таблицам. Для уничтожения нашей таблицы Customer_Data применяется команда:
DROP TABLE Customer_Data GO
(Подробно об операторе DROP TABLE см.лекцию 15.)
Язык DML (SELECT, INSERT, UPDATE и DELETE. При помощи этих операторов можно соответственно выбирать строки с данными, вставлять новые строки, изменять имеющиеся строки и удалять ненужные строки. Ниже даны простые примеры применения этих операторов. (Более сложные примеры см. в лекциях 14 и 20.)
Оператор INSERT применяется для вставки строки данных в таблицу или в представление. Например, если вы хотите добавить нового заказчика (customer) в нашу таблицу-пример Customer_Data, то оператор INSERT может выглядеть так:
INSERT INTO Customer_Data (customer_id, first_name, last_name, phone) VALUES (777, 'Frankie', 'Stein', '4895873900')
Обратите внимание, что во второй строке первого оператора SQL помещен список имен колонок. Этот список определяет, в какие именно колонки будут помещены данные (данные вводятся в той последовательности, как они указаны). Так, первое значение данных будет помещено в первую колонку из списка, в customer_id; второе значение будет помещено во вторую колонку из списка, и т.д. Мы перечислили значения данных в том же порядке, в каком были заданы колонки при создании таблицы, поэтому можно вообще не указывать имена колонок и применить вот такой оператор INSERT:
INSERT INTO Customer_Data VALUES (777, 'Frankie', 'Stein', '4895873900')
INSERT, в случае, если вводимые значения перечислены не в том порядке, как были заданы колонки при создании таблицы, значения могут попасть не в те колонки, куда надо (если вводимые данные совместимы с типами данных колонок). Если же данные будут несовместимы с типами данных колонок, то вы получите ошибку.Оператор SELECT применяется для извлечения данных из таблицы или из таблиц. Извлекаемые данные определяются перечисленными колонками и предложением WHERE. Предположим, например, что нам надо извлечь значения из колонок customer_id и first_name нашей таблицы Customer_Data, и эти данные нужны лишь для строк со значением Frankie в поле first_name. Тогда нужно применить такой оператор SELECT:
SELECT customer_id, first_name FROM Customer_Data WHERE first_name = 'Frankie' Если критерию из оператора SELECT будет соответствовать лишь одна строка, то результат может быть таким: customer_id first_name -------------- ------------- 777 Frankie
Оператор UPDATE применяется для обновления (т.е. изменения) значений в одной или нескольких строках таблицы. Например, допустим, заказчик Frankie Stein позвонил и попросил изменить его имя в записях базы данных на Franklin. Эту задачу выполнит такой оператор UPDATE:
UPDATE Customer_Data SET first_name = 'Franklin' WHERE last_name = 'Stein' and customer_id=777
В предложении WHERE указан идентификационный номер заказчика ( customer_id ), чтобы не допустить изменения имен других заказчиков с такой же фамилией Stein (если такие заказчики имеются), имена будут изменены лишь у заказчика с идентификационным номером 777.
UPDATE обязательно задавайте достаточно много фильтров в предложении WHERE, чтобы не изменить ошибочно ненужные строки.Оператор DELETE применяется для удаления из таблицы одной или нескольких строк с данными. Можно удалить даже все строки таблицы. Чтобы удалить все строки из нашей таблицы-примера Customer_Data, можно воспользоваться каким-либо одним из двух показанных ниже операторов DELETE:
DELETE FROM Customer_Data
или
DELETE Customer_Data
Ключевое слово FROM перед именем таблицы в операторе DELETE не обязательно, эти два оператора ничем не отличаются. Для удаления из таблицы Customer_Data строк, у которых значение колонки customer_id меньше, чем 100, применяется такой оператор:
DELETE FROM Customer_Data WHERE customer_id < 100
Теперь, когда вы вкратце познакомились с операторами языков
T-SQL – это усовершенствование стандартного языка программирования SQL. Первоначальный, основной SQL применяется для взаимодействия между приложениями и SQL Server. В T-SQL имеются все возможности языков IF and WHILE ), обеспечивающие гораздо большую гибкость программирования. По мере выхода новых версий SQL Server возможности T-SQL растут.
В T-SQL для Microsoft SQL Server 7 появились многочисленные добавления и улучшения, в том числе новые хранимые процедуры, системные таблицы, функции, типы данных, операторы и новые возможности для старых операторов. Все было сохранено и в SQL Server 2000, и мы сейчас дадим краткий обзор этих новых возможностей (если вы не знаете о них по опыту своей работы с SQL Server 7). Однако их слишком много, чтобы мы смогли дать подробные описания, поэтому мы рассмотрим лишь несколько примеров для каждой их разновидности.
В SQL Server имеются системные хранимые процедуры, с помощью которых можно выполнять администрирование и другие задачи, требующие обновления системных таблиц и извлечения информации из системных таблиц. Системные хранимые процедуры инсталлируются вместе с SQL Server, их имена начинаются с sp_ или с xp_. Эти процедуры хранятся в базе данных master (главной системной базе данных) (а также базе msdb. – Прим. ред.), их владелец – системный администратор, но многие из них могут запускаться из любой пользовательской базы данных, извлекая при этом информацию из системных таблиц этой базы данных. Когда вы исполняете системную хранимую процедуру, она работает с системными таблицами текущей базы данных.
Многие системные хранимые процедуры появились в SQL Server 7, сейчас они по-прежнему доступны и в SQL Server 2000. В табл. 13.1 перечислены некоторые из этих системных процедур, они могут вам пригодиться.
| Системная хранимая процедура | Описание |
|---|---|
sp_cycle_errorlog |
Закрывает текущий файл- |
sp_helpfile |
Возвращает физические имена и |
sp_helpfilegroup |
Возвращает имена и атрибуты групп файлов, сопоставленных с текущей базой данных |
sp_helprole |
Возвращает информацию о ролях в текущей базе данных |
sp_help_alert |
Возвращает информацию о предупреждениях, заданных для сервера |
sp_start_job |
Приказывает, чтобы SQL Server Agent начал выполнять задание |
Некоторые из этих хранимых процедур не только немедленно выдают информацию, но могут и сохранять для дальнейшего применения важную информацию о пользовательских базах данных. Например, процедуры, возвращающие информацию о sp_helpfile, sp_helpfilegroup и sp_helpdb, примененных к нужной базе данных (процедура sp_helpdb, хоть и старая, но по-прежнему пользуется популярностью). Это пригодится в случае, если придется воссоздавать базу данных и понадобится информация о первоначально созданных и сконфигурированных файлах, группах файлов и опциях базы данных. Список остальных новых системных процедур, появившихся в SQL Server 7, вы найдете в Books Online, в теме "New Features in Transact-SQL" (Новые возможности в Transact-SQL).
Системные таблицы служат для хранения информации о конфигурации SQL Server и хранения заданных для баз данных определений объектов, пользователей и полномочий доступа. Каждая пользовательская база данных имеет свои собственные системные таблицы, в которых хранится информация для этой базы данных. Системные таблицы, хранящие информацию о конфигурации на уровне сервера, хранятся только в базе данных master (главной системной базе данных). Для доступа к системным таблицам нужно применять системные хранимые процедуры, а не осуществлять доступ непосредственно. Список новых системных таблиц, появившихся первоначально в SQL Server 7, вы найдете в Books Online, в теме "New Features in Transact-SQL". Ниже перечисленные некоторые интересные системные таблицы.
При помощи встроенных функций SQL Server возможно быстрое и удобное решение некоторых задач. Некоторые новые функции появились в SQL Server 7, и они остались доступными и в SQL Server 2000. Зная об имеющихся функциях, вам будет проще программировать приложения SQL Server. Полный список новых функций вы найдете в Books Online, в теме "New Transact-SQL Functions" (Новые функции Transact-SQL). Ниже приведены описания лишь нескольких из новых функций, которые могут вам пригодиться:
NEWID. Создает глобально уникальный идентификатор (GUID, globally uniqueidentifier. Эту функцию можно применять для ввода значений в колонки, имеющие тип данных uniqueidentifier. Применение: NEWID(). (Этой функции не нужны параметры.)YEAR. Возвращает целое число, соответствующее году для заданной даты. Применение: YEAR(дата). Пример: оператор SELECT YEAR('07/11/01') выдаст значение 2001.MONTH. Возвращает целое число, соответствующее месяцу для заданной даты. Применение: MONTH(дата). Пример: оператор SELECT MONTH('07/11/01') выдаст значение 7.DAY. Возвращает целое число, соответствующее дню для заданной даты. Применение: DAY(дата). Пример: оператор SELECT DAY('07/11/01') выдаст значение 11.FILE_NAME. Возвращает FILE_NAME (номер_идентификатора_файла). Пример: оператор SELECT FILE_NAME(4) вернет имя файла, имеющего идентификатор 4. Если в базе данных нет файла с таким идентификатором, то будет возвращено значение NULL.В SQL Server 7 появилось несколько новых типов данных, а некоторые из имеющихся типов данных получили новые размеры. В SQL Server 2000 помимо этих новшеств появилось еще три новых типа данных. Про большинство типов данных было рассказано в лекции 10. Ниже дан список изменений, относящихся к типам данных, появившихся в SQL Server 7 и оставшихся и в SQL Server 2000:
cursor, для переменных-курсоров. Дополнительную информацию о курсорах вы найдете в Books Online, в теме "Cursors".nchar, nvarchar и ntext. При использовании кодировки Unicode на один символ расходуется по 2 байта, и эта кодировка может поддерживать символы всех имеющихся в мире языков.uniqueidentifier, применяемый для хранения глобально уникальных идентификаторов (GUID).char, varchar, binary и varbinary.А ниже перечислены три новых типа данных, появившихся в SQL Server 2000:
bigint – хранит 8-байтные целые числа.sql_variant – позволяет хранить значения разных типов в одной и той же колонке. В колонках этого типа хранятся как сами данные, так и сведения о них (table – этот тип данных аналогичен временным таблицам, описание данных включает в себя список колонок с типами данных. Этот тип данных можно применять для задания локальных переменных или для возвращаемых значений пользовательских функций.В SQL Server 7 появилось много новых операторов T-SQL, а имеющиеся операторы приобрели новые возможности, и все это вошло и в SQL Server 2000. Эти операторы соответствуют некоторым из новых возможностей, появившихся в SQL Server 7. Например, оператор ALTER DATABASE получил следующие новые опции для работы с файлами и группами файлов: MODIFY FILE, ADD FILEGROUP, MODIFY FILEGROUP, REMOVE FILE и REMOVE FILEGROUP. А для групп файлов новый оператор DBCC CHECKFILEGROUP проверяет размещение и структурную целостность всех таблиц в заданной группе файлов.
В SQL Server 7 и SQL Server 2000 появилось еще два оператора DBCC – DBCC SHRINKFILE и DBCC SHRINKDATABASE. Первый из них сжимает заданный файл данных, уменьшая его размер, а второй оператор сжимает все файлы в заданной базе данных, освобождая неиспользуемое место на диске.
У SQL Server 7 и SQL Server 2000 была усовершенствована архитектура для резервного копирования и восстановления. Новый оператор BACKUP позволяет выполнять полные и частичные резервные RESTORE позволяет восстанавливать базы данных и журналы после этого резервного копирования. Эти операторы применяются вместо операторов и LOAD из старых версий SQL Server. Полный список новых операторов и опций, появившихся в SQL Server 7 и SQL Server 2000, вы найдете в Books Online, в теме "New Features in Transact-SQL". Более подробно о резервном копировании и о восстановлении после резервного копирования будет рассказано в лекциях 32 и 33.
T-SQL можно применять не только в программах ваших приложений (эта тема выходит за рамки нашей книги), вы можете также исполнять интерактивные операторы T-SQL, пользуясь какой-нибудь из трех утилит – ISQL, OSQL или Query Analyzer; кроме того, вы можете создавать и исполнять сценарии SQL.
Утилита ISQL взаимодействует с SQL Server через API-интерфейс DB-LIB; с ее помощью можно исполнять интерактивные операторы T-SQL, хранимые процедуры и файлы сценариев. API-интерфейс DB-LIB остался на уровне функциональности SQL Server 6.5, поэтому приложение ISQL не поддерживает некоторые возможности SQL Server 2000. Например, ISQL не может извлекать данные из типа данных ntext (в кодировке Unicode).
Утилита OSQL появилась в SQL Server 7 и осталась в SQL Server 2000 в качестве замены для ISQL. Утилиты ISQL и OSQL очень во многом сходны, но OSQL для коммуникации с SQL Server применяет API-интерфейс ODBC (
osql –U имя_пользователя –P пароль –S имя_сервера
Когда OSQL установит соединение с SQL Server, появится такое приглашение с номером:
1>
После этого приглашения можно вводить операторы T-SQL, например, такой оператор:
1> sp_helpdb master 2> go
В результате его выполнения будет выдана информация о базе данных master. Ключевое слово go не является оператором T-SQL, это – команда, распознаваемая ISQL, OSQL и Query Analyzer и обозначающая завершение пакета операторов T-SQL. Вывод от исполнения таких
Если при наборе командных строк OSQL вы допустили опечатку, то, воспользовавшись командой RESET, можно снова вернуться к приглашению первой строки:
1> sp_helpbd 2> reset 1> sp_helpdb 2> go
Для завершения работы с утилитой OSQL введите команду QUIT или EXIT. Команду или запрос, исполняющуюся в текущий момент времени, можно завершить, нажав Ctrl+C (выход из утилиты OSQL при этом не произойдет).
Утилита OSQL имеет и другие параметры кроме -U, -P и -S. Полное описание всех параметров и дополнительную информацию об утилите OSQL вы найдете в Books Online, в теме "osql Utility".
Query Analyzer применяется для исполнения операторов или сценариев T-SQL из графического пользовательского интерфейса и для получения результатов в форматированном виде. Query Analyzer обладает также некоторыми средствами для анализа индексов запросов. Некоторые люди предпочитают применять Query Analyzer, а не запускать операторы в окне "приглашения MS-DOS". Для работы с Query Analyzer выполните следующие действия:
isqlw в командной строке;Создав свои собственные сценарии, вы получите замечательную возможность для многократного запуска операторов и хранимых процедур T-SQL. Сценарий (script) – это просто файл, в котором содержатся операторы T-SQL, которые нужно запускать. В скрипте может быть как один оператор, так и последовательность операторов. Мы сразу дадим одну рекомендацию: создавая сценарии T-SQL, давайте именам их файлов расширение .sql, тогда вам будет легче находить эти файлы.
Ниже дан пример кода простого сценария:
use MyDB go sp_helpdb MyDB go sp_helpfilegroup go sp_spaceused Customer_Data go sp_spaceused Product_Info go
Этот сценарий вызывает несколько системных хранимых процедур, собирающих разнообразную информацию о базе данных MyDB и ее файлах, группах файлов и таблицах (Customer_Data и Product_Info).
Предположим, что этот сценарий был сохранен в файле MyDB_info.sql. Тогда, чтобы запустить его из командной строки, вы можете воспользоваться опциями -i и -o утилиты OSQL. Опция -i вызывает запуск сценария, находящегося во входном файле ( input ), имя которого указано после опции. Опция -o задает выходной файл ( output ), имя которого указано после опции, в него будут помещены результаты. Пусть выходной файл у нас будет иметь имя MyDB_info.out. Давайте также применим опцию -e, тогда операторы T-SQL из входного файла будут отображаться (echo) также и в выходном файле, что облегчит понимание выходного файла. Например, чтобы исполнить наш сценарий, будучи системным администратором, надо дать следующую команду в командной строке:
osql –U sa –P –i MyDB_info.sql –o MyDB_info.out –e
Посмотрите выходной файл и проверьте, что сценарий работает именно так, как надо. Пользуясь сценариями T-SQL таким способом, вы можете сохранять их вывод в файлах и просматривать его потом, например, когда вы захотите сравнить результаты работы сценария до и после внесения каких-либо изменений в базу данных. Кроме того, сценарии полезны, если вам придется использовать какие-либо операторы неоднократно.
Есть и другой способ запуска сценариев, при котором вам не понадобится каждый раз набирать с клавиатуры команду osql -u ....Надо создать .cmd-файл и поместить в него эту команду. Так, можно назвать этот файл MyDB_info.cmd и поместить в него вышеприведенную команду osql -u .... Теперь вы можете не только запустить команду MYDB_INFO из командной строки, но и дважды щелкнуть мышью на имени файла MyDB_info.cmd в Проводнике Microsoft Windows.
Сценарии можно запускать и в Query Analyzer. Чтобы запустить наш сценарий MyDB_info.sql, откройте этот файл, выбрав в Query Analyzer команду Open в меню File, после этого в верхней панели появится код сценария. Нажмите на кнопку Execute Query или нажмите клавиши Ctrl+E, и операторы сценария исполнятся. Вывод от операторов сценария будет выдаваться в соответствии с порядком исполнения операторов (рис. 13.5). Обратите внимание, что на рис. 13.5 две верхние таблицы результатов выданы хранимой процедурой sp_helpdb.
(рис 13.5) Результаты исполнения сценария Query Analyzer
В этой лекции вы познакомились с основами языков SQL и T-SQL, увидели примеры простых операторов
В этой лекции вы познакомитесь с основными понятиями языков SQL (Structured
SQL – это язык программирования и запросов к базам данных, он применяется для осуществления доступа к данным, для запросов к реляционным СУБД, для управления базами данных и их обновления. Стандарт SQL утвержден как Американским Национальным Институтом Стандартов (ANSI, American National Standards Institute), так и Международной организацией по стандартизации (ISO, International Organization for Standardization). ANSI – это организация промышленных и деловых групп, разрабатывающая стандарты для торговли и коммуникации в Соединенных Штатах. ANSI также является членом ISO и IEC (Международной электротехнической комиссии, International
Язык SQL содержит операторы, относящиеся к одному из двух основных языков программирования в составе SQL:
Язык DDL (CREATE, ALTER и DROP для каждого из объектов, с которым производится работа. Например, для первоначального создания таблицы, для изменения ее свойств (скажем, для создания или для удаления колонок) и для уничтожения таблицы соответственно применяются операторы CREATE TABLE, и DROP TABLE ; мы расскажем об этих операторах в нескольких следующих разделах.
Давайте в качестве примера применим CREATE TABLE. Наша таблица-пример будет задана как имеющая четыре колонки, при помощи следующих операторов:
Use MyDB CREATE TABLE Customer_Data (customer_id smallint, first_name char(20), last_name char(20), phone char(10)) GO
Эти операторы создают структуру таблицы Customer_Data. Таблица Customer_Data останется пустой до тех пор, пока в нее не будут введены данные или она не будет заполнена при помощи массового копирования. (Более подробно о создании таблиц см. лекцию 10.)
Оператор применяется для изменения определения или атрибутов таблицы. В нашем примере оператор применяется для добавления в существующую таблицу Customer_Data колонки middle_initial:
ALTER TABLE Customer_Data ADD middle_initial char(1) GO
Теперь определение таблицы содержит не четыре колонки, как было первоначально, а пять колонок. (Более подробно о применении оператора см. лекцию 15.)
Оператор DROP TABLE применяется для уничтожения определений таблиц и всех данных, индексов, триггеров, ограничений и специальных разрешений, относящихся к удаляемым таблицам. Для уничтожения нашей таблицы Customer_Data применяется команда:
DROP TABLE Customer_Data GO
(Подробно об операторе DROP TABLE см.лекцию 15.)
Язык DML (SELECT, INSERT, UPDATE и DELETE. При помощи этих операторов можно соответственно выбирать строки с данными, вставлять новые строки, изменять имеющиеся строки и удалять ненужные строки. Ниже даны простые примеры применения этих операторов. (Более сложные примеры см. в лекциях 14 и 20.)
Оператор INSERT применяется для вставки строки данных в таблицу или в представление. Например, если вы хотите добавить нового заказчика (customer) в нашу таблицу-пример Customer_Data, то оператор INSERT может выглядеть так:
INSERT INTO Customer_Data (customer_id, first_name, last_name, phone) VALUES (777, 'Frankie', 'Stein', '4895873900')
Обратите внимание, что во второй строке первого оператора SQL помещен список имен колонок. Этот список определяет, в какие именно колонки будут помещены данные (данные вводятся в той последовательности, как они указаны). Так, первое значение данных будет помещено в первую колонку из списка, в customer_id; второе значение будет помещено во вторую колонку из списка, и т.д. Мы перечислили значения данных в том же порядке, в каком были заданы колонки при создании таблицы, поэтому можно вообще не указывать имена колонок и применить вот такой оператор INSERT:
INSERT INTO Customer_Data VALUES (777, 'Frankie', 'Stein', '4895873900')
INSERT, в случае, если вводимые значения перечислены не в том порядке, как были заданы колонки при создании таблицы, значения могут попасть не в те колонки, куда надо (если вводимые данные совместимы с типами данных колонок). Если же данные будут несовместимы с типами данных колонок, то вы получите ошибку.Оператор SELECT применяется для извлечения данных из таблицы или из таблиц. Извлекаемые данные определяются перечисленными колонками и предложением WHERE. Предположим, например, что нам надо извлечь значения из колонок customer_id и first_name нашей таблицы Customer_Data, и эти данные нужны лишь для строк со значением Frankie в поле first_name. Тогда нужно применить такой оператор SELECT:
SELECT customer_id, first_name FROM Customer_Data WHERE first_name = 'Frankie' Если критерию из оператора SELECT будет соответствовать лишь одна строка, то результат может быть таким: customer_id first_name -------------- ------------- 777 Frankie
Оператор UPDATE применяется для обновления (т.е. изменения) значений в одной или нескольких строках таблицы. Например, допустим, заказчик Frankie Stein позвонил и попросил изменить его имя в записях базы данных на Franklin. Эту задачу выполнит такой оператор UPDATE:
UPDATE Customer_Data SET first_name = 'Franklin' WHERE last_name = 'Stein' and customer_id=777
В предложении WHERE указан идентификационный номер заказчика ( customer_id ), чтобы не допустить изменения имен других заказчиков с такой же фамилией Stein (если такие заказчики имеются), имена будут изменены лишь у заказчика с идентификационным номером 777.
UPDATE обязательно задавайте достаточно много фильтров в предложении WHERE, чтобы не изменить ошибочно ненужные строки.Оператор DELETE применяется для удаления из таблицы одной или нескольких строк с данными. Можно удалить даже все строки таблицы. Чтобы удалить все строки из нашей таблицы-примера Customer_Data, можно воспользоваться каким-либо одним из двух показанных ниже операторов DELETE:
DELETE FROM Customer_Data
или
DELETE Customer_Data
Ключевое слово FROM перед именем таблицы в операторе DELETE не обязательно, эти два оператора ничем не отличаются. Для удаления из таблицы Customer_Data строк, у которых значение колонки customer_id меньше, чем 100, применяется такой оператор:
DELETE FROM Customer_Data WHERE customer_id < 100
Теперь, когда вы вкратце познакомились с операторами языков
T-SQL – это усовершенствование стандартного языка программирования SQL. Первоначальный, основной SQL применяется для взаимодействия между приложениями и SQL Server. В T-SQL имеются все возможности языков IF and WHILE ), обеспечивающие гораздо большую гибкость программирования. По мере выхода новых версий SQL Server возможности T-SQL растут.
В T-SQL для Microsoft SQL Server 7 появились многочисленные добавления и улучшения, в том числе новые хранимые процедуры, системные таблицы, функции, типы данных, операторы и новые возможности для старых операторов. Все было сохранено и в SQL Server 2000, и мы сейчас дадим краткий обзор этих новых возможностей (если вы не знаете о них по опыту своей работы с SQL Server 7). Однако их слишком много, чтобы мы смогли дать подробные описания, поэтому мы рассмотрим лишь несколько примеров для каждой их разновидности.
В SQL Server имеются системные хранимые процедуры, с помощью которых можно выполнять администрирование и другие задачи, требующие обновления системных таблиц и извлечения информации из системных таблиц. Системные хранимые процедуры инсталлируются вместе с SQL Server, их имена начинаются с sp_ или с xp_. Эти процедуры хранятся в базе данных master (главной системной базе данных) (а также базе msdb. – Прим. ред.), их владелец – системный администратор, но многие из них могут запускаться из любой пользовательской базы данных, извлекая при этом информацию из системных таблиц этой базы данных. Когда вы исполняете системную хранимую процедуру, она работает с системными таблицами текущей базы данных.
Многие системные хранимые процедуры появились в SQL Server 7, сейчас они по-прежнему доступны и в SQL Server 2000. В табл. 13.1 перечислены некоторые из этих системных процедур, они могут вам пригодиться.
| Системная хранимая процедура | Описание |
|---|---|
sp_cycle_errorlog |
Закрывает текущий файл- |
sp_helpfile |
Возвращает физические имена и |
sp_helpfilegroup |
Возвращает имена и атрибуты групп файлов, сопоставленных с текущей базой данных |
sp_helprole |
Возвращает информацию о ролях в текущей базе данных |
sp_help_alert |
Возвращает информацию о предупреждениях, заданных для сервера |
sp_start_job |
Приказывает, чтобы SQL Server Agent начал выполнять задание |
Некоторые из этих хранимых процедур не только немедленно выдают информацию, но могут и сохранять для дальнейшего применения важную информацию о пользовательских базах данных. Например, процедуры, возвращающие информацию о sp_helpfile, sp_helpfilegroup и sp_helpdb, примененных к нужной базе данных (процедура sp_helpdb, хоть и старая, но по-прежнему пользуется популярностью). Это пригодится в случае, если придется воссоздавать базу данных и понадобится информация о первоначально созданных и сконфигурированных файлах, группах файлов и опциях базы данных. Список остальных новых системных процедур, появившихся в SQL Server 7, вы найдете в Books Online, в теме "New Features in Transact-SQL" (Новые возможности в Transact-SQL).
Системные таблицы служат для хранения информации о конфигурации SQL Server и хранения заданных для баз данных определений объектов, пользователей и полномочий доступа. Каждая пользовательская база данных имеет свои собственные системные таблицы, в которых хранится информация для этой базы данных. Системные таблицы, хранящие информацию о конфигурации на уровне сервера, хранятся только в базе данных master (главной системной базе данных). Для доступа к системным таблицам нужно применять системные хранимые процедуры, а не осуществлять доступ непосредственно. Список новых системных таблиц, появившихся первоначально в SQL Server 7, вы найдете в Books Online, в теме "New Features in Transact-SQL". Ниже перечисленные некоторые интересные системные таблицы.
При помощи встроенных функций SQL Server возможно быстрое и удобное решение некоторых задач. Некоторые новые функции появились в SQL Server 7, и они остались доступными и в SQL Server 2000. Зная об имеющихся функциях, вам будет проще программировать приложения SQL Server. Полный список новых функций вы найдете в Books Online, в теме "New Transact-SQL Functions" (Новые функции Transact-SQL). Ниже приведены описания лишь нескольких из новых функций, которые могут вам пригодиться:
NEWID. Создает глобально уникальный идентификатор (GUID, globally uniqueidentifier. Эту функцию можно применять для ввода значений в колонки, имеющие тип данных uniqueidentifier. Применение: NEWID(). (Этой функции не нужны параметры.)YEAR. Возвращает целое число, соответствующее году для заданной даты. Применение: YEAR(дата). Пример: оператор SELECT YEAR('07/11/01') выдаст значение 2001.MONTH. Возвращает целое число, соответствующее месяцу для заданной даты. Применение: MONTH(дата). Пример: оператор SELECT MONTH('07/11/01') выдаст значение 7.DAY. Возвращает целое число, соответствующее дню для заданной даты. Применение: DAY(дата). Пример: оператор SELECT DAY('07/11/01') выдаст значение 11.FILE_NAME. Возвращает FILE_NAME (номер_идентификатора_файла). Пример: оператор SELECT FILE_NAME(4) вернет имя файла, имеющего идентификатор 4. Если в базе данных нет файла с таким идентификатором, то будет возвращено значение NULL.В SQL Server 7 появилось несколько новых типов данных, а некоторые из имеющихся типов данных получили новые размеры. В SQL Server 2000 помимо этих новшеств появилось еще три новых типа данных. Про большинство типов данных было рассказано в лекции 10. Ниже дан список изменений, относящихся к типам данных, появившихся в SQL Server 7 и оставшихся и в SQL Server 2000:
cursor, для переменных-курсоров. Дополнительную информацию о курсорах вы найдете в Books Online, в теме "Cursors".nchar, nvarchar и ntext. При использовании кодировки Unicode на один символ расходуется по 2 байта, и эта кодировка может поддерживать символы всех имеющихся в мире языков.uniqueidentifier, применяемый для хранения глобально уникальных идентификаторов (GUID).char, varchar, binary и varbinary.А ниже перечислены три новых типа данных, появившихся в SQL Server 2000:
bigint – хранит 8-байтные целые числа.sql_variant – позволяет хранить значения разных типов в одной и той же колонке. В колонках этого типа хранятся как сами данные, так и сведения о них (table – этот тип данных аналогичен временным таблицам, описание данных включает в себя список колонок с типами данных. Этот тип данных можно применять для задания локальных переменных или для возвращаемых значений пользовательских функций.В SQL Server 7 появилось много новых операторов T-SQL, а имеющиеся операторы приобрели новые возможности, и все это вошло и в SQL Server 2000. Эти операторы соответствуют некоторым из новых возможностей, появившихся в SQL Server 7. Например, оператор ALTER DATABASE получил следующие новые опции для работы с файлами и группами файлов: MODIFY FILE, ADD FILEGROUP, MODIFY FILEGROUP, REMOVE FILE и REMOVE FILEGROUP. А для групп файлов новый оператор DBCC CHECKFILEGROUP проверяет размещение и структурную целостность всех таблиц в заданной группе файлов.
В SQL Server 7 и SQL Server 2000 появилось еще два оператора DBCC – DBCC SHRINKFILE и DBCC SHRINKDATABASE. Первый из них сжимает заданный файл данных, уменьшая его размер, а второй оператор сжимает все файлы в заданной базе данных, освобождая неиспользуемое место на диске.
У SQL Server 7 и SQL Server 2000 была усовершенствована архитектура для резервного копирования и восстановления. Новый оператор BACKUP позволяет выполнять полные и частичные резервные RESTORE позволяет восстанавливать базы данных и журналы после этого резервного копирования. Эти операторы применяются вместо операторов и LOAD из старых версий SQL Server. Полный список новых операторов и опций, появившихся в SQL Server 7 и SQL Server 2000, вы найдете в Books Online, в теме "New Features in Transact-SQL". Более подробно о резервном копировании и о восстановлении после резервного копирования будет рассказано в лекциях 32 и 33.
T-SQL можно применять не только в программах ваших приложений (эта тема выходит за рамки нашей книги), вы можете также исполнять интерактивные операторы T-SQL, пользуясь какой-нибудь из трех утилит – ISQL, OSQL или Query Analyzer; кроме того, вы можете создавать и исполнять сценарии SQL.
Утилита ISQL взаимодействует с SQL Server через API-интерфейс DB-LIB; с ее помощью можно исполнять интерактивные операторы T-SQL, хранимые процедуры и файлы сценариев. API-интерфейс DB-LIB остался на уровне функциональности SQL Server 6.5, поэтому приложение ISQL не поддерживает некоторые возможности SQL Server 2000. Например, ISQL не может извлекать данные из типа данных ntext (в кодировке Unicode).
Утилита OSQL появилась в SQL Server 7 и осталась в SQL Server 2000 в качестве замены для ISQL. Утилиты ISQL и OSQL очень во многом сходны, но OSQL для коммуникации с SQL Server применяет API-интерфейс ODBC (
osql –U имя_пользователя –P пароль –S имя_сервера
Когда OSQL установит соединение с SQL Server, появится такое приглашение с номером:
1>
После этого приглашения можно вводить операторы T-SQL, например, такой оператор:
1> sp_helpdb master 2> go
В результате его выполнения будет выдана информация о базе данных master. Ключевое слово go не является оператором T-SQL, это – команда, распознаваемая ISQL, OSQL и Query Analyzer и обозначающая завершение пакета операторов T-SQL. Вывод от исполнения таких
Если при наборе командных строк OSQL вы допустили опечатку, то, воспользовавшись командой RESET, можно снова вернуться к приглашению первой строки:
1> sp_helpbd 2> reset 1> sp_helpdb 2> go
Для завершения работы с утилитой OSQL введите команду QUIT или EXIT. Команду или запрос, исполняющуюся в текущий момент времени, можно завершить, нажав Ctrl+C (выход из утилиты OSQL при этом не произойдет).
Утилита OSQL имеет и другие параметры кроме -U, -P и -S. Полное описание всех параметров и дополнительную информацию об утилите OSQL вы найдете в Books Online, в теме "osql Utility".
Query Analyzer применяется для исполнения операторов или сценариев T-SQL из графического пользовательского интерфейса и для получения результатов в форматированном виде. Query Analyzer обладает также некоторыми средствами для анализа индексов запросов. Некоторые люди предпочитают применять Query Analyzer, а не запускать операторы в окне "приглашения MS-DOS". Для работы с Query Analyzer выполните следующие действия:
isqlw в командной строке;Создав свои собственные сценарии, вы получите замечательную возможность для многократного запуска операторов и хранимых процедур T-SQL. Сценарий (script) – это просто файл, в котором содержатся операторы T-SQL, которые нужно запускать. В скрипте может быть как один оператор, так и последовательность операторов. Мы сразу дадим одну рекомендацию: создавая сценарии T-SQL, давайте именам их файлов расширение .sql, тогда вам будет легче находить эти файлы.
Ниже дан пример кода простого сценария:
use MyDB go sp_helpdb MyDB go sp_helpfilegroup go sp_spaceused Customer_Data go sp_spaceused Product_Info go
Этот сценарий вызывает несколько системных хранимых процедур, собирающих разнообразную информацию о базе данных MyDB и ее файлах, группах файлов и таблицах (Customer_Data и Product_Info).
Предположим, что этот сценарий был сохранен в файле MyDB_info.sql. Тогда, чтобы запустить его из командной строки, вы можете воспользоваться опциями -i и -o утилиты OSQL. Опция -i вызывает запуск сценария, находящегося во входном файле ( input ), имя которого указано после опции. Опция -o задает выходной файл ( output ), имя которого указано после опции, в него будут помещены результаты. Пусть выходной файл у нас будет иметь имя MyDB_info.out. Давайте также применим опцию -e, тогда операторы T-SQL из входного файла будут отображаться (echo) также и в выходном файле, что облегчит понимание выходного файла. Например, чтобы исполнить наш сценарий, будучи системным администратором, надо дать следующую команду в командной строке:
osql –U sa –P –i MyDB_info.sql –o MyDB_info.out –e
Посмотрите выходной файл и проверьте, что сценарий работает именно так, как надо. Пользуясь сценариями T-SQL таким способом, вы можете сохранять их вывод в файлах и просматривать его потом, например, когда вы захотите сравнить результаты работы сценария до и после внесения каких-либо изменений в базу данных. Кроме того, сценарии полезны, если вам придется использовать какие-либо операторы неоднократно.
Есть и другой способ запуска сценариев, при котором вам не понадобится каждый раз набирать с клавиатуры команду osql -u ....Надо создать .cmd-файл и поместить в него эту команду. Так, можно назвать этот файл MyDB_info.cmd и поместить в него вышеприведенную команду osql -u .... Теперь вы можете не только запустить команду MYDB_INFO из командной строки, но и дважды щелкнуть мышью на имени файла MyDB_info.cmd в Проводнике Microsoft Windows.
Сценарии можно запускать и в Query Analyzer. Чтобы запустить наш сценарий MyDB_info.sql, откройте этот файл, выбрав в Query Analyzer команду Open в меню File, после этого в верхней панели появится код сценария. Нажмите на кнопку Execute Query или нажмите клавиши Ctrl+E, и операторы сценария исполнятся. Вывод от операторов сценария будет выдаваться в соответствии с порядком исполнения операторов (рис. 13.5). Обратите внимание, что на рис. 13.5 две верхние таблицы результатов выданы хранимой процедурой sp_helpdb.
(рис 13.5) Результаты исполнения сценария Query Analyzer
В этой лекции вы познакомились с основами языков SQL и T-SQL, увидели примеры простых операторов
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.