SQL Server 2000

Введение в Transact-SQL и SQL Query Аnalyzer

Разбить на страницы
Показывать лекцию целиком

В этой лекции вы познакомитесь с основными понятиями языков SQL (Structured Query Language, язык структурированных запросов) и T-SQL (Transact-SQL); также будет рассказано о различиях между этими двумя языками. Будут рассмотрены составные части SQL – язык DDL (data definition language, язык определения данных) и DML (data manipulation language, язык манипулирования данными), для каждого из этих языков будут даны примеры. Также мы кратко рассмотрим новые свойства T-SQL, имеющиеся в Microsoft SQL Server 2000. Вы узнаете, как применять различные утилиты SQL Server, в том числе утилиту командной строки T-SQL и SQL Server Query Analyzer, что позволит вам создавать объекты базы данных и управлять этими объектами. Вы также научитесь создавать сценарии, содержащие операторы T-SQL.

Что такое SQL

SQL – это язык программирования и запросов к базам данных, он применяется для осуществления доступа к данным, для запросов к реляционным СУБД, для управления базами данных и их обновления. Стандарт SQL утвержден как Американским Национальным Институтом Стандартов (ANSI, American National Standards Institute), так и Международной организацией по стандартизации (ISO, International Organization for Standardization). ANSI – это организация промышленных и деловых групп, разрабатывающая стандарты для торговли и коммуникации в Соединенных Штатах. ANSI также является членом ISO и IEC (Международной электротехнической комиссии, International Electrotechnical Commission). ANSI публикует стандарты США, которые соответствуют международным стандартам. В 1992 году ISO и IEC опубликовали международный стандарт на SQL, который принято называть SQL-92. ANSI опубликовал в Соединенных Штатах соответствующий стандарт, ANSI SQL-92, который иногда называют ANSI SQL. Хотя разные реляционные СУБД применяют несколько различающиеся версии SQL, но большинство из них соответствуют стандарту SQL-92, определенному ANSI.

Язык SQL содержит операторы, относящиеся к одному из двух основных языков программирования в составе SQL: DDL и DML, о которых мы расскажем вам в последующих разделах.

DDL

Язык DDL (data definition language, язык определения данных) применяется для определения объектов баз данных (таких как базы данных, таблиц и представления) и для управления этими объектами. (Про представления (views) будет рассказано в лекции 18.) Операторы языка DDL обычно включают в себя команды CREATE, ALTER и DROP для каждого из объектов, с которым производится работа. Например, для первоначального создания таблицы, для изменения ее свойств (скажем, для создания или для удаления колонок) и для уничтожения таблицы соответственно применяются операторы CREATE TABLE, ALTER TABLE и DROP TABLE ; мы расскажем об этих операторах в нескольких следующих разделах.

Оператор CREATE TABLE

Давайте в качестве примера применим DDL для создания в базе данных MyDB таблицы с именем Customer_Data (Сведения_о_заказчиках). Эту таблицу Customer_Data обработки мы будем использовать и в других примерах, приведенных в этой лекции. Как уже говорилось, для создания таблицы применяется оператор 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.)

Оператор ALTER TABLE

Оператор ALTER TABLE применяется для изменения определения или атрибутов таблицы. В нашем примере оператор ALTER TABLE применяется для добавления в существующую таблицу Customer_Data колонки middle_initial:

ALTER TABLE Customer_Data 
ADD middle_initial char(1) 
GO

Теперь определение таблицы содержит не четыре колонки, как было первоначально, а пять колонок. (Более подробно о применении оператора ALTER TABLE см. лекцию 15.)

Оператор DROP TABLE

Оператор DROP TABLE применяется для уничтожения определений таблиц и всех данных, индексов, триггеров, ограничений и специальных разрешений, относящихся к удаляемым таблицам. Для уничтожения нашей таблицы Customer_Data применяется команда:

DROP TABLE Customer_Data 
GO

(Подробно об операторе DROP TABLE см.лекцию 15.)

DML

Язык DML (data manipulation language, язык манипулирования данными) применяется для манипулирования данными, содержащимися в объектах базы данных, для чего применяются такие операторы, как SELECT, INSERT, UPDATE и DELETE. При помощи этих операторов можно соответственно выбирать строки с данными, вставлять новые строки, изменять имеющиеся строки и удалять ненужные строки. Ниже даны простые примеры применения этих операторов. (Более сложные примеры см. в лекциях 14 и 20.)

Оператор INSERT

Оператор 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

Оператор 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

Оператор 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

Оператор 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

Теперь, когда вы вкратце познакомились с операторами языков DDL и DML, входящих в состав SQL, давайте рассмотрим язык T-SQL.

Что такое T-SQL

T-SQL – это усовершенствование стандартного языка программирования SQL. Первоначальный, основной SQL применяется для взаимодействия между приложениями и SQL Server. В T-SQL имеются все возможности языков DDL и DML стандартного SQL, а кроме этого имеются также расширенные функции, системные хранимые процедуры и конструкции для программирования (такие, как IF and WHILE ), обеспечивающие гораздо большую гибкость программирования. По мере выхода новых версий SQL Server возможности T-SQL растут.

Обзор новых возможностей T-SQL

В T-SQL для Microsoft SQL Server 7 появились многочисленные добавления и улучшения, в том числе новые хранимые процедуры, системные таблицы, функции, типы данных, операторы и новые возможности для старых операторов. Все было сохранено и в SQL Server 2000, и мы сейчас дадим краткий обзор этих новых возможностей (если вы не знаете о них по опыту своей работы с SQL Server 7). Однако их слишком много, чтобы мы смогли дать подробные описания, поэтому мы рассмотрим лишь несколько примеров для каждой их разновидности.

Дополнительная информация. Чтобы получить полный список новых возможностей T-SQL, обратитесь к SQL Server Books Online, к теме "New Features in Transact-SQL" (Новые возможности в Transact-SQL). Чтобы открыть эту тему, нажмите на Transact-SQL Reference во вкладке Contents, а затем нажмите на New Features in Transact-SQL.

Системные хранимые процедуры

В SQL Server имеются системные хранимые процедуры, с помощью которых можно выполнять администрирование и другие задачи, требующие обновления системных таблиц и извлечения информации из системных таблиц. Системные хранимые процедуры инсталлируются вместе с SQL Server, их имена начинаются с sp_ или с xp_. Эти процедуры хранятся в базе данных master (главной системной базе данных) (а также базе msdb. – Прим. ред.), их владелец – системный администратор, но многие из них могут запускаться из любой пользовательской базы данных, извлекая при этом информацию из системных таблиц этой базы данных. Когда вы исполняете системную хранимую процедуру, она работает с системными таблицами текущей базы данных.

Дополнительная информация. Дополнительную информацию о системных хранимых процедурах вы найдете в Books Online, в теме "Extended Stored Procedures" (Расширенные хранимые процедуры).

Многие системные хранимые процедуры появились в SQL Server 7, сейчас они по-прежнему доступны и в SQL Server 2000. В табл. 13.1 перечислены некоторые из этих системных процедур, они могут вам пригодиться.

Процедуры, появившиеся в SQL Server 7, имеющиеся и в SQL Server 2000
Системная хранимая процедура Описание
sp_cycle_errorlog Закрывает текущий файл-журнал ошибок и переименовывает его в errorlog.1 (если необходимо, переименовывает старый errorlog.1 в errorlog.2 и так далее) и открывает новый файл-журнал ошибок >
sp_helpfile Возвращает физические имена и атрибуты файлов, сопоставленных с текущей базой данных
sp_helpfilegroup Возвращает имена и атрибуты групп файлов, сопоставленных с текущей базой данных
sp_helprole Возвращает информацию о ролях в текущей базе данных
sp_help_alert Возвращает информацию о предупреждениях, заданных для сервера
sp_start_job Приказывает, чтобы SQL Server Agent начал выполнять задание

Некоторые из этих хранимых процедур не только немедленно выдают информацию, но могут и сохранять для дальнейшего применения важную информацию о пользовательских базах данных. Например, процедуры, возвращающие информацию о базе данных пользователя, могут оказаться полезными при исполнении в сценариях T-SQL, когда выдаваемая ими информация будет сохраняться в файле. Вы можете сохранять информацию, выдаваемую после запуска хранимых процедур 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". Ниже перечисленные некоторые интересные системные таблицы.

  • backupfile. Эта таблица находится в базе данных msdb. В ее строках хранится информация обо всех резервных копиях журналов и файлов базы данных. Хранится информация об идентификаторах файлов, о группах, к которым принадлежат файлы, и о буквах для обозначения физических дисков, на которых расположены файлы.
  • restorehistory. Эта таблица находится в базе данных msdb. В ее строках хранится информация обо всех операциях восстановления файлов и баз данных. В этой таблице содержится информация о дате и времени выполненного резервного копирования, о целевой базе данных, о моменте времени, когда было восстановление, и о типе восстановления.
  • sysfiles.  Это – виртуальная таблица, поэтому она не может обновляться непосредственно. В ней содержится информация обо всех файлах базы данных, например, физические и логические имена файлов, размеры и максимальные размеры файлов и приращение роста (если эти значения заданы).Внимание. Для доступа к системным таблицам пользуйтесь только системными хранимыми процедурами. (Другой рекомендованный способ доступа к системным таблицам – это использование так называемых Представлений Информационной Схемы – Information_Schema views. – Прим. ред.) Системные хранимые процедуры являются как бы "изолирующей прокладкой", не дающей вам изменять те данные, которые изменять не следует. Осуществляя доступ к системным таблицам вручную, вы рискуете испортить свою базу данных, изменив важную системную информацию, из-за чего эта база данных станет бесполезной.
  • Функции

    При помощи встроенных функций SQL Server возможно быстрое и удобное решение некоторых задач. Некоторые новые функции появились в SQL Server 7, и они остались доступными и в SQL Server 2000. Зная об имеющихся функциях, вам будет проще программировать приложения SQL Server. Полный список новых функций вы найдете в Books Online, в теме "New Transact-SQL Functions" (Новые функции Transact-SQL). Ниже приведены описания лишь нескольких из новых функций, которые могут вам пригодиться:

  • NEWID. Создает глобально уникальный идентификатор (GUID, globally unique identifier), он имеет тип данных 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".
  • Появились новые типы данных для кодировки Unicode: nchar, nvarchar и ntext. При использовании кодировки Unicode на один символ расходуется по 2 байта, и эта кодировка может поддерживать символы всех имеющихся в мире языков.
  • Появился новый тип данных uniqueidentifier, применяемый для хранения глобально уникальных идентификаторов (GUID).
  • Максимальная длина строк с символьными и с двоичными данными увеличилась до 8000 байт. Эта длина допустима для типов данных char, varchar, binary и varbinary.
  • А ниже перечислены три новых типа данных, появившихся в SQL Server 2000:

  • bigint   – хранит 8-байтные целые числа.
  • sql_variant   – позволяет хранить значения разных типов в одной и той же колонке. В колонках этого типа хранятся как сами данные, так и сведения о них (базовый тип данных, масштаб, точность, максимальный размер и свойства для сравнения (collation)).
  • 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 позволяет восстанавливать базы данных и журналы после этого резервного копирования. Эти операторы применяются вместо операторов DUMP и LOAD из старых версий SQL Server. Полный список новых операторов и опций, появившихся в SQL Server 7 и SQL Server 2000, вы найдете в Books Online, в теме "New Features in Transact-SQL". Более подробно о резервном копировании и о восстановлении после резервного копирования будет рассказано в лекциях 32 и 33.

    Как применять T-SQL

    T-SQL можно применять не только в программах ваших приложений (эта тема выходит за рамки нашей книги), вы можете также исполнять интерактивные операторы T-SQL, пользуясь какой-нибудь из трех утилит – ISQL, OSQL или Query Analyzer; кроме того, вы можете создавать и исполнять сценарии SQL.

    Утилита ISQL

    Утилита ISQL взаимодействует с SQL Server через API-интерфейс DB-LIB; с ее помощью можно исполнять интерактивные операторы T-SQL, хранимые процедуры и файлы сценариев. API-интерфейс DB-LIB остался на уровне функциональности SQL Server 6.5, поэтому приложение ISQL не поддерживает некоторые возможности SQL Server 2000. Например, ISQL не может извлекать данные из типа данных ntext (в кодировке Unicode).

    Утилита OSQL

    Утилита OSQL появилась в SQL Server 7 и осталась в SQL Server 2000 в качестве замены для ISQL. Утилиты ISQL и OSQL очень во многом сходны, но OSQL для коммуникации с SQL Server применяет API-интерфейс ODBC (Open Database Connectivity), а не DB-LIB, и OSQL поддерживает все возможности SQL Server 2000. Во всем остальном OSQL и ISQL функционируют одинаково. SQL Server 2000 поддерживает обе этих утилиты, однако, чтобы не столкнуться с проблемами, о которых мы упомянули, следует пользоваться OSQL, а не ISQL.Чтобы исполнять OSQL из окна с приглашением командной строки (из окна MS-DOS), нужно просто запустить программу OSQL.exe с соответствующими параметрами, например, так:

    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

    Query Analyzer применяется для исполнения операторов или сценариев T-SQL из графического пользовательского интерфейса и для получения результатов в форматированном виде. Query Analyzer обладает также некоторыми средствами для анализа индексов запросов. Некоторые люди предпочитают применять Query Analyzer, а не запускать операторы в окне "приглашения MS-DOS". Для работы с Query Analyzer выполните следующие действия:

  • Запустите Query Analyzer каким-либо из следующих трех способов.
  • введите isqlw в командной строке;
  • откройте Enterprise Manager и выберите SQL Query Analyzer в меню Tools;
  • в меню кнопки Start наведите указатель мыши сначала на Programs, затем на Microsoft SQL Server, а затем выберите Query Analyzer.
  • Если вы не соединены с сервером, то появится диалоговое окно Connect to SQL Server (Соединиться с SQL Server) (рис 13.1(рис 13.1) Диалоговое окно Connect to SQL Server
  • В ниспадающем списке SQL Server выберите сервер, с которым вы хотите соединяться. Точка, стоящая в этом поле, означает соединение с локальным сервером. Введите информацию для входа в систему и, если вы желаете, чтобы в случаях, когда SQL Server не запущен, он запускался бы автоматически, установите флажок Start SQL Server if it is stopped. Затем нажмите на экранную кнопку OK. Появится стартовое окно Query Analyzer (рис 13.2(рис 13.2) SQL Query Analyzer
  • В окне запросов введите с клавиатуры любой оператор T-SQL или вызов хранимой процедуры (рис 13.3(рис 13.3) Вызов хранимой процедуры в окне запросов
  • Чтобы выполнить введенный оператор, нажмите на кнопку Execute Query (Исполнить запрос), находящуюся на панели инструментов и выглядящую как зеленый треугольник, указывающий острием вправо, либо нажмите Ctrl+E*. Результаты исполнения запроса появятся в панели результатов (рис 13.4(рис 13.4) Query Analyzer показывает результаты исполнения запроса
  • Если нужно, чтобы Query Analyzer загрузил и исполнил созданный вами ранее T-SQL-сценарий, то нажмите на кнопку Load SQL Script в панели инструментов, выглядящую как желтая папка, или выберите команду Open в меню File, а затем найдите и укажите нужный файл со сценарием. Весь сценарий появится в верхней панели окна запросов. Для запуска сценария нажмите на кнопку Execute Query.Примечание. Query Analyzer имеет еще много других возможностей, в том числе некоторые новые возможности для SQL Server 2000. (Подробнее об этом см. лекцию 35.)
  • Сценарии T-SQL

    Создав свои собственные сценарии, вы получите замечательную возможность для многократного запуска операторов и хранимых процедур 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, увидели примеры простых операторов DDL и DML. Теперь вы умеете запускать операторы T-SQL, причем разными способами – при помощи ISQL, OSQL, Query Analyzer и из сценариев T-SQL. (Об использовании T-SQL см. в лекциях 14, 15 и 25.)

    Страницы:

    В этой лекции вы познакомитесь с основными понятиями языков SQL (Structured Query Language, язык структурированных запросов) и T-SQL (Transact-SQL); также будет рассказано о различиях между этими двумя языками. Будут рассмотрены составные части SQL – язык DDL (data definition language, язык определения данных) и DML (data manipulation language, язык манипулирования данными), для каждого из этих языков будут даны примеры. Также мы кратко рассмотрим новые свойства T-SQL, имеющиеся в Microsoft SQL Server 2000. Вы узнаете, как применять различные утилиты SQL Server, в том числе утилиту командной строки T-SQL и SQL Server Query Analyzer, что позволит вам создавать объекты базы данных и управлять этими объектами. Вы также научитесь создавать сценарии, содержащие операторы T-SQL.

    Что такое SQL

    SQL – это язык программирования и запросов к базам данных, он применяется для осуществления доступа к данным, для запросов к реляционным СУБД, для управления базами данных и их обновления. Стандарт SQL утвержден как Американским Национальным Институтом Стандартов (ANSI, American National Standards Institute), так и Международной организацией по стандартизации (ISO, International Organization for Standardization). ANSI – это организация промышленных и деловых групп, разрабатывающая стандарты для торговли и коммуникации в Соединенных Штатах. ANSI также является членом ISO и IEC (Международной электротехнической комиссии, International Electrotechnical Commission). ANSI публикует стандарты США, которые соответствуют международным стандартам. В 1992 году ISO и IEC опубликовали международный стандарт на SQL, который принято называть SQL-92. ANSI опубликовал в Соединенных Штатах соответствующий стандарт, ANSI SQL-92, который иногда называют ANSI SQL. Хотя разные реляционные СУБД применяют несколько различающиеся версии SQL, но большинство из них соответствуют стандарту SQL-92, определенному ANSI.

    Язык SQL содержит операторы, относящиеся к одному из двух основных языков программирования в составе SQL: DDL и DML, о которых мы расскажем вам в последующих разделах.

    DDL

    Язык DDL (data definition language, язык определения данных) применяется для определения объектов баз данных (таких как базы данных, таблиц и представления) и для управления этими объектами. (Про представления (views) будет рассказано в лекции 18.) Операторы языка DDL обычно включают в себя команды CREATE, ALTER и DROP для каждого из объектов, с которым производится работа. Например, для первоначального создания таблицы, для изменения ее свойств (скажем, для создания или для удаления колонок) и для уничтожения таблицы соответственно применяются операторы CREATE TABLE, ALTER TABLE и DROP TABLE ; мы расскажем об этих операторах в нескольких следующих разделах.

    Оператор CREATE TABLE

    Давайте в качестве примера применим DDL для создания в базе данных MyDB таблицы с именем Customer_Data (Сведения_о_заказчиках). Эту таблицу Customer_Data обработки мы будем использовать и в других примерах, приведенных в этой лекции. Как уже говорилось, для создания таблицы применяется оператор 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.)

    Оператор ALTER TABLE

    Оператор ALTER TABLE применяется для изменения определения или атрибутов таблицы. В нашем примере оператор ALTER TABLE применяется для добавления в существующую таблицу Customer_Data колонки middle_initial:

    ALTER TABLE Customer_Data 
    ADD middle_initial char(1) 
    GO

    Теперь определение таблицы содержит не четыре колонки, как было первоначально, а пять колонок. (Более подробно о применении оператора ALTER TABLE см. лекцию 15.)

    Оператор DROP TABLE

    Оператор DROP TABLE применяется для уничтожения определений таблиц и всех данных, индексов, триггеров, ограничений и специальных разрешений, относящихся к удаляемым таблицам. Для уничтожения нашей таблицы Customer_Data применяется команда:

    DROP TABLE Customer_Data 
    GO

    (Подробно об операторе DROP TABLE см.лекцию 15.)

    DML

    Язык DML (data manipulation language, язык манипулирования данными) применяется для манипулирования данными, содержащимися в объектах базы данных, для чего применяются такие операторы, как SELECT, INSERT, UPDATE и DELETE. При помощи этих операторов можно соответственно выбирать строки с данными, вставлять новые строки, изменять имеющиеся строки и удалять ненужные строки. Ниже даны простые примеры применения этих операторов. (Более сложные примеры см. в лекциях 14 и 20.)

    Оператор INSERT

    Оператор 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

    Оператор 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

    Оператор 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

    Оператор 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

    Теперь, когда вы вкратце познакомились с операторами языков DDL и DML, входящих в состав SQL, давайте рассмотрим язык T-SQL.

    Что такое T-SQL

    T-SQL – это усовершенствование стандартного языка программирования SQL. Первоначальный, основной SQL применяется для взаимодействия между приложениями и SQL Server. В T-SQL имеются все возможности языков DDL и DML стандартного SQL, а кроме этого имеются также расширенные функции, системные хранимые процедуры и конструкции для программирования (такие, как IF and WHILE ), обеспечивающие гораздо большую гибкость программирования. По мере выхода новых версий SQL Server возможности T-SQL растут.

    Обзор новых возможностей T-SQL

    В T-SQL для Microsoft SQL Server 7 появились многочисленные добавления и улучшения, в том числе новые хранимые процедуры, системные таблицы, функции, типы данных, операторы и новые возможности для старых операторов. Все было сохранено и в SQL Server 2000, и мы сейчас дадим краткий обзор этих новых возможностей (если вы не знаете о них по опыту своей работы с SQL Server 7). Однако их слишком много, чтобы мы смогли дать подробные описания, поэтому мы рассмотрим лишь несколько примеров для каждой их разновидности.

    Дополнительная информация. Чтобы получить полный список новых возможностей T-SQL, обратитесь к SQL Server Books Online, к теме "New Features in Transact-SQL" (Новые возможности в Transact-SQL). Чтобы открыть эту тему, нажмите на Transact-SQL Reference во вкладке Contents, а затем нажмите на New Features in Transact-SQL.

    Системные хранимые процедуры

    В SQL Server имеются системные хранимые процедуры, с помощью которых можно выполнять администрирование и другие задачи, требующие обновления системных таблиц и извлечения информации из системных таблиц. Системные хранимые процедуры инсталлируются вместе с SQL Server, их имена начинаются с sp_ или с xp_. Эти процедуры хранятся в базе данных master (главной системной базе данных) (а также базе msdb. – Прим. ред.), их владелец – системный администратор, но многие из них могут запускаться из любой пользовательской базы данных, извлекая при этом информацию из системных таблиц этой базы данных. Когда вы исполняете системную хранимую процедуру, она работает с системными таблицами текущей базы данных.

    Дополнительная информация. Дополнительную информацию о системных хранимых процедурах вы найдете в Books Online, в теме "Extended Stored Procedures" (Расширенные хранимые процедуры).

    Многие системные хранимые процедуры появились в SQL Server 7, сейчас они по-прежнему доступны и в SQL Server 2000. В табл. 13.1 перечислены некоторые из этих системных процедур, они могут вам пригодиться.

    Процедуры, появившиеся в SQL Server 7, имеющиеся и в SQL Server 2000
    Системная хранимая процедура Описание
    sp_cycle_errorlog Закрывает текущий файл-журнал ошибок и переименовывает его в errorlog.1 (если необходимо, переименовывает старый errorlog.1 в errorlog.2 и так далее) и открывает новый файл-журнал ошибок >
    sp_helpfile Возвращает физические имена и атрибуты файлов, сопоставленных с текущей базой данных
    sp_helpfilegroup Возвращает имена и атрибуты групп файлов, сопоставленных с текущей базой данных
    sp_helprole Возвращает информацию о ролях в текущей базе данных
    sp_help_alert Возвращает информацию о предупреждениях, заданных для сервера
    sp_start_job Приказывает, чтобы SQL Server Agent начал выполнять задание

    Некоторые из этих хранимых процедур не только немедленно выдают информацию, но могут и сохранять для дальнейшего применения важную информацию о пользовательских базах данных. Например, процедуры, возвращающие информацию о базе данных пользователя, могут оказаться полезными при исполнении в сценариях T-SQL, когда выдаваемая ими информация будет сохраняться в файле. Вы можете сохранять информацию, выдаваемую после запуска хранимых процедур 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". Ниже перечисленные некоторые интересные системные таблицы.

  • backupfile. Эта таблица находится в базе данных msdb. В ее строках хранится информация обо всех резервных копиях журналов и файлов базы данных. Хранится информация об идентификаторах файлов, о группах, к которым принадлежат файлы, и о буквах для обозначения физических дисков, на которых расположены файлы.
  • restorehistory. Эта таблица находится в базе данных msdb. В ее строках хранится информация обо всех операциях восстановления файлов и баз данных. В этой таблице содержится информация о дате и времени выполненного резервного копирования, о целевой базе данных, о моменте времени, когда было восстановление, и о типе восстановления.
  • sysfiles.  Это – виртуальная таблица, поэтому она не может обновляться непосредственно. В ней содержится информация обо всех файлах базы данных, например, физические и логические имена файлов, размеры и максимальные размеры файлов и приращение роста (если эти значения заданы).Внимание. Для доступа к системным таблицам пользуйтесь только системными хранимыми процедурами. (Другой рекомендованный способ доступа к системным таблицам – это использование так называемых Представлений Информационной Схемы – Information_Schema views. – Прим. ред.) Системные хранимые процедуры являются как бы "изолирующей прокладкой", не дающей вам изменять те данные, которые изменять не следует. Осуществляя доступ к системным таблицам вручную, вы рискуете испортить свою базу данных, изменив важную системную информацию, из-за чего эта база данных станет бесполезной.
  • Функции

    При помощи встроенных функций SQL Server возможно быстрое и удобное решение некоторых задач. Некоторые новые функции появились в SQL Server 7, и они остались доступными и в SQL Server 2000. Зная об имеющихся функциях, вам будет проще программировать приложения SQL Server. Полный список новых функций вы найдете в Books Online, в теме "New Transact-SQL Functions" (Новые функции Transact-SQL). Ниже приведены описания лишь нескольких из новых функций, которые могут вам пригодиться:

  • NEWID. Создает глобально уникальный идентификатор (GUID, globally unique identifier), он имеет тип данных 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".
  • Появились новые типы данных для кодировки Unicode: nchar, nvarchar и ntext. При использовании кодировки Unicode на один символ расходуется по 2 байта, и эта кодировка может поддерживать символы всех имеющихся в мире языков.
  • Появился новый тип данных uniqueidentifier, применяемый для хранения глобально уникальных идентификаторов (GUID).
  • Максимальная длина строк с символьными и с двоичными данными увеличилась до 8000 байт. Эта длина допустима для типов данных char, varchar, binary и varbinary.
  • А ниже перечислены три новых типа данных, появившихся в SQL Server 2000:

  • bigint   – хранит 8-байтные целые числа.
  • sql_variant   – позволяет хранить значения разных типов в одной и той же колонке. В колонках этого типа хранятся как сами данные, так и сведения о них (базовый тип данных, масштаб, точность, максимальный размер и свойства для сравнения (collation)).
  • 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 позволяет восстанавливать базы данных и журналы после этого резервного копирования. Эти операторы применяются вместо операторов DUMP и LOAD из старых версий SQL Server. Полный список новых операторов и опций, появившихся в SQL Server 7 и SQL Server 2000, вы найдете в Books Online, в теме "New Features in Transact-SQL". Более подробно о резервном копировании и о восстановлении после резервного копирования будет рассказано в лекциях 32 и 33.

    Как применять T-SQL

    T-SQL можно применять не только в программах ваших приложений (эта тема выходит за рамки нашей книги), вы можете также исполнять интерактивные операторы T-SQL, пользуясь какой-нибудь из трех утилит – ISQL, OSQL или Query Analyzer; кроме того, вы можете создавать и исполнять сценарии SQL.

    Утилита ISQL

    Утилита ISQL взаимодействует с SQL Server через API-интерфейс DB-LIB; с ее помощью можно исполнять интерактивные операторы T-SQL, хранимые процедуры и файлы сценариев. API-интерфейс DB-LIB остался на уровне функциональности SQL Server 6.5, поэтому приложение ISQL не поддерживает некоторые возможности SQL Server 2000. Например, ISQL не может извлекать данные из типа данных ntext (в кодировке Unicode).

    Утилита OSQL

    Утилита OSQL появилась в SQL Server 7 и осталась в SQL Server 2000 в качестве замены для ISQL. Утилиты ISQL и OSQL очень во многом сходны, но OSQL для коммуникации с SQL Server применяет API-интерфейс ODBC (Open Database Connectivity), а не DB-LIB, и OSQL поддерживает все возможности SQL Server 2000. Во всем остальном OSQL и ISQL функционируют одинаково. SQL Server 2000 поддерживает обе этих утилиты, однако, чтобы не столкнуться с проблемами, о которых мы упомянули, следует пользоваться OSQL, а не ISQL.Чтобы исполнять OSQL из окна с приглашением командной строки (из окна MS-DOS), нужно просто запустить программу OSQL.exe с соответствующими параметрами, например, так:

    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

    Query Analyzer применяется для исполнения операторов или сценариев T-SQL из графического пользовательского интерфейса и для получения результатов в форматированном виде. Query Analyzer обладает также некоторыми средствами для анализа индексов запросов. Некоторые люди предпочитают применять Query Analyzer, а не запускать операторы в окне "приглашения MS-DOS". Для работы с Query Analyzer выполните следующие действия:

  • Запустите Query Analyzer каким-либо из следующих трех способов.
  • введите isqlw в командной строке;
  • откройте Enterprise Manager и выберите SQL Query Analyzer в меню Tools;
  • в меню кнопки Start наведите указатель мыши сначала на Programs, затем на Microsoft SQL Server, а затем выберите Query Analyzer.
  • Если вы не соединены с сервером, то появится диалоговое окно Connect to SQL Server (Соединиться с SQL Server) (рис 13.1(рис 13.1) Диалоговое окно Connect to SQL Server
  • В ниспадающем списке SQL Server выберите сервер, с которым вы хотите соединяться. Точка, стоящая в этом поле, означает соединение с локальным сервером. Введите информацию для входа в систему и, если вы желаете, чтобы в случаях, когда SQL Server не запущен, он запускался бы автоматически, установите флажок Start SQL Server if it is stopped. Затем нажмите на экранную кнопку OK. Появится стартовое окно Query Analyzer (рис 13.2(рис 13.2) SQL Query Analyzer
  • В окне запросов введите с клавиатуры любой оператор T-SQL или вызов хранимой процедуры (рис 13.3(рис 13.3) Вызов хранимой процедуры в окне запросов
  • Чтобы выполнить введенный оператор, нажмите на кнопку Execute Query (Исполнить запрос), находящуюся на панели инструментов и выглядящую как зеленый треугольник, указывающий острием вправо, либо нажмите Ctrl+E*. Результаты исполнения запроса появятся в панели результатов (рис 13.4(рис 13.4) Query Analyzer показывает результаты исполнения запроса
  • Если нужно, чтобы Query Analyzer загрузил и исполнил созданный вами ранее T-SQL-сценарий, то нажмите на кнопку Load SQL Script в панели инструментов, выглядящую как желтая папка, или выберите команду Open в меню File, а затем найдите и укажите нужный файл со сценарием. Весь сценарий появится в верхней панели окна запросов. Для запуска сценария нажмите на кнопку Execute Query.Примечание. Query Analyzer имеет еще много других возможностей, в том числе некоторые новые возможности для SQL Server 2000. (Подробнее об этом см. лекцию 35.)
  • Сценарии T-SQL

    Создав свои собственные сценарии, вы получите замечательную возможность для многократного запуска операторов и хранимых процедур 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, увидели примеры простых операторов DDL и DML. Теперь вы умеете запускать операторы T-SQL, причем разными способами – при помощи ISQL, OSQL, Query Analyzer и из сценариев T-SQL. (Об использовании T-SQL см. в лекциях 14, 15 и 25.)

    Вернуться к учебному плану