Программирование в Microsoft SQL Server 2000

С чего начать изучение


Microsoft SQL Server 2000 – это система управления реляционными базами данных (RDBMS) в топологии клиент/сервер, разработанная для обработки высокопроизводительных сетевых транзакций (OLTP), хранения данных и использования в приложениях электронной коммерции. Курс "Программирование в Microsoft SQL Server 2000 Шаг за шагом" поможет вам быстро освоить принципы создания и манипулирования базами данных с использованием интерактивных средств, входящих в состав SQL Server 2000 версий Personal, Standard и Enterprise.
Внимание! Этот курс предназначен для использования с SQL Server 2000, однако сама система не поставляется вместе с курсом. Прежде, чем приступить к выполнению уроков, вы должны приобрести и установить SQL Server 2000.
Этот курс предназначен как для читателей, вообще не знакомых с реляционными базами данных, так и для тех, которые имеют опыт работы с другими системами управления базами данных, такими как Microsoft Access, и хотели бы перейти к SQL Server 2000. Воспользуйтесь приведенной ниже таблицей, чтобы выбрать для себя план занятий.
Если вы ...Порядок действий
Не знакомы с системами реляционных баз данных
  • Установите учебные файлы, как описано в соответствующем разделе далее.
  • Познакомьтесь с окружением SQL Server, проработав уроки с 1 по 5.
  • Выполните уроки, содержащиеся в частях со 2 по 4.
  • Выполните уроки из части 5 в соответствии с вашими интересами и опытом работы.

  • Ранее работали с другим продуктом управления базами данных
  • Установите учебные файлы, как описано в соответствующем разделе далее.
  • Познакомьтесь с окружением SQL Server, проработав уроки с 1 по 5.
  • Выполните остальные уроки в соответствии с вашими интересами и опытом работы.

  • Переходите с более ранней версии Microsoft SQL Server
  • Познакомьтесь с новыми возможностями SQL Server 2000, обратившись к разделу "Новые возможности SQL Server 2000".
  • Установите учебные файлы, как описано в соответствующем разделе далее.
  • Выполните уроки, в которых раскрываются интересующие вас темы. Для поиска информации по интересующим вас вопросам обратитесь к оглавлению или к предметному указателю.

  • Используете эту курс как справочное пособие после того, как проработали все уроки
  • Найдите интересующую вас информацию с помощью предметного указателя, либо воспользуйтесь оглавлением.
  • Прочтите "Краткое содержание" в конце каждого из уроков для справки о том, какие действия выполнялись в ходе этого урока. Порядок описания действий в "Кратком содержании" совпадает с порядком их выполнения в ходе урока.




  • Системные базы данных


    Дерево консоли Console Tree в Enterprise Manager всегда содержит четыре базы данных, которые использует собственно SQL Server. Эти базы данных называются системными базами данных. Их роли в SQL Server описаны в Таблице 1-3.
    Внимание! Поскольку целостность системы базы данных имеет важное значение для успешной работы SQL Server, вы должны всегда использовать инструменты администрирования, предоставляемые Enterprise Manager или программным интерфейсом (SQL-DMO) для изменения содержимого баз данных master или msdb.
    Руководствуйтесь принципом: смотрите, но не трогайте!

    Таблица 1-3. Системные базы данных SQL ServerСистемная база данныхНазначение
    MasterБаза данных master записывает всю информацию, необходимую для управления системы SQL Server, включая учетную запись пользователя. База данных определена в пределах процессов системы и сервера. Таблицы, хранящиеся в базе данных master, называются системным каталогом.
    ModelБаза данных model используется как шаблон при создании пользователем новой базы данных. По умолчанию, база данных model содержит таблицы, составляющие каталог базы данных, таблицы которые используются SQL Server для определения других объектов в пределах базы данных пользователя.
    MsdbБаза данных msdb используется SQL Server Agent для составления расписания сопровождения задач, таких как оповещения и задания, и регистрации событий. Оповещения являются определяемыми пользователем событиями SQL Server. Задания являются рядом действий, выполняемых SQL Server Agent.
    TempdbTempdb используется для временного сохранения данных. Ее содержимое автоматически очищается при выключении SQL Server. В действительности, все временные объекты, созданные пользователем, уничтожаются при выходе этого пользователя из системы.

    Совет. Любые объекты, добавленные вами в базу данных model, будут автоматически добавляться в любые создаваемые вами новые базы данных. Это может быть удобно, если вы, например, захотите, чтобы некоторые пользователи или конфигурационные опции базы данных появлялись во всех новых базах данных.
    Помните, однако, что любые объекты, добавленные вами в базу данных model, будут автоматически добавляться только в новые базы данных, но не в уже существующие.


    Управление SQL Server


    Перед тем, как вы сможете использовать SQL Server Enterprise Manager для создания новой базы данных или доступа к данным из существующей базы, вы сначала должны идентифицировать экземпляр сервера в Enterprise Manager, убедиться, что сервер запущен, и соединиться с базой данных, с которой вы будете работать.
    Режимы безопасности SQL Server
    SQL Server поддерживает два различных режима аутентификации при входе в систему, которые гарантирует, что только авторизованные пользователи будут иметь доступ к соответствующим данным – Windows Authentication и SQL Server Authentication. Microsoft рекомендует модель Windows Authentication, которая "прозрачно" допускает пользователей Microsoft Windows 2000 и Microsoft Windows NT в систему, используя их пароли и имена пользователей в операционной системе. Если вы используете модель SQL Server Authentication, сервер сам управляет аутентификацией пользователей, и пользователи должны вводить имя и пароль при соединении с базой данных.
    В этом курсе предполагается, что ваш сервер будет использовать рекомендованную конфигурацию: Windows Authentication. Если ваш сервер использует аутентификацию SQL Server Authentication, то всякий раз при регистрации сервера или соединении с базой данных вам надо будет вводить имя и пароль для доступа. В этом случае введите имя и пароль, предоставленные вашим администратором, и затем нажмите OK.
    Мы подробно рассмотрим вопросы безопасности SQL Server 2000 в уроке 3.


    Запуск и остановка сервера


    Перед тем, как вы сможете соединиться с экземпляром SQL Server, должна быть запущена служба. Вы сможете узнать запущена служба или нет, взглянув на значок сервера в дереве консоли в Enterprise Manager. Каждый из значков его смысл приведены в Таблице 1-1.

    Таблица 1-1. Вид значка сервера показывает, запущен ли экземпляр SQL Server.ЗначокОзначает
    Запуск и остановка сервераСервер запущен
    Запуск и остановка сервераСервер приостановлен
    Запуск и остановка сервераСервер остановлен

    Запустите сервер
  • Щелкните правой кнопкой мыши на сервере. Нажмите Start (Запуск) в появившемся контекстном меню.

  • Приостановите сервер
  • Щелкните правой кнопкой мыши на сервере. Нажмите Pause (Приостановить) в появившемся контекстном меню.

  • Остановите сервер
  • Щелкните правой кнопкой мыши на сервере. Нажмите Stop (Остановить) в появившемся контекстном меню.

  • Внимание! Перед тем, как продолжить работу над уроком, убедитесь, что используемый вами сервер запущен.


    Зарегистрируйте сервер


    Примечание. Если имя сервера отображено в дереве консоли Console Tree, то это означает, что он уже зарегистрирован с помощью Enterprise Manager, и вам не надо выполнять следующие действия. Пропустите этот раздел и переходите к следующему "Запуск и остановка сервера".
  • Щелкните правой кнопкой мыши на группе сервера в дереве консоли Console Tree. Появится контекстное меню.
    Зарегистрируйте сервер
    увеличить изображение

  • В контекстном меню нажмите на New SQL Server Registration (Новая регистрация SQL Server). Появиться окно приглашения мастера регистрации Register SQL Server Wizard.
    Зарегистрируйте сервер


  • Совет. Вы также можете выбрать New SQL Server Registration (Новая регистрация SQL Server) из контекстного меню, отображаемого после щелчка правой кнопкой мыши на сервере в дереве консоли Console Tree.
  • Нажмите Next (Далее). Появиться первая страница мастера регистрации Register SQL Server Wizard со списком имен серверов, известных системе.
    Зарегистрируйте сервер

  • Если сервер, который вы хотите зарегистрировать, присутствует в списке, то выберите его в поле списка имен и нажмите Add (Добавить). Если имя сервера там отсутствует, то введите его имя в текстовом поле, а затем нажмите на кнопке Add (Добавить). Мастер отобразит сервер в поле Added Servers (Добавленные серверы).
    Зарегистрируйте сервер

  • Нажмите Next (Далее). Мастер отобразит окно, запрашивающее, какой метод идентификации вы выбираете.
    Зарегистрируйте сервер

  • Если ваш системный администратор сказал вам использовать аутентификацию SQL Server Authentication, щелкните на кнопке выбора The SQL Server Login Information That Was Assigned To Me By The System Administrator (SQL Server Authentication). При этом для входа будет использоваться информация, назначенная вам системным администратором.
  • Нажмите Next (Далее).

  • Если вы выбрали аутентификацию SQL Server Authentication, то вам нужно будет ввести ваш идентификатор учетной записи и пароль. Введите эту информацию и нажмите Next (Далее).
    Мастер отобразит экран, спрашивающий вас о том, какую вы выберите группу, в которую новый сервер должен быть добавлен.
    Зарегистрируйте сервер

  • Нажмите Next (Далее) для добавления сервера в группу по умолчанию. Мастер отобразит окно, сообщающее о том, что сервер добавлен.
    Зарегистрируйте сервер

  • Нажмите Finish (Готово). Мастер завершит задачи, необходимые для регистрации сервера, и отобразит окно подтверждения.
    Зарегистрируйте сервер

  • Нажмите Close (Закрыть).

  • Мастер Register SQL Server Wizard будет закрыт, а в дереве консоли Console Tree появиться новый сервер.
    Совет. Вам нужно зарегистрировать экземпляр SQL Server только один раз. Enterprise Manager запоминает зарегистрированные серверы при следующем запуске программы.


    Использование мастера Database Maintenance Plan Wizard


    Вы узнали, как делать резервные копии базы данных и как восстанавливать ее. Но резервные копии нужно создавать регулярно и возможно, что вы забудете это сделать. SQL Server предоставляет механизм для автоматического создания резервных копий по составленному расписанию. Для этого есть несколько способов, самый простой – это с помощью мастера планирования сопровождения базы данных Database Maintenance Plan Wizard.
    Мастер Database Maintenance Plan Wizard позволяет создавать расписание для задач по сопровождению, которые должны регулярно выполняться. Наиболее важной из таких задач является обновление статистики базы данных.
    SQL Server содержит информацию о статистическом распределении данных в виде таблиц. Эту информацию SQL Server использует для определения наиболее эффективных методов восстановления данных. Тем не менее, через некоторое время эти данные устаревают по мере того, как добавляются новые или стираются старые. SQL Server автоматически обновляет статистическую информацию, но вы можете настроить его с помощью мастера Database Maintenance Plan Wizard на обновление информации в определенное время. Также вы можете использовать мастер Database Maintenance Plan Wizard для составления расписания выполнения SQL Server регулярных проверок целостности. Это нижнеуровневая проверка физической целостности таблиц пользователя и системных таблиц. Наконец вы можете использовать мастер Database Maintenance Plan Wizard для настройки режима переноса журнала. Этот метод автоматически обслуживает резервную копию сервера с помощью постоянного копирования журналов транзакций сервера.
    Один план сопровождения базы данных может выполнять эти задачи в различных комбинациях. Вы также можете использовать SQL Server для создания отчета с результатами выполненных им задач. Этот отчет может быть сохранен в специальной директории как текстовый файл или как документ HTML, или он может быть отправлен по почте оператору. В приведенном ниже упражнении мы просто установим режим регулярного резервного копирования.
    Создайте план сопровождения для создания резервных копий каждый месяц
  • В дереве консоли Console Tree выберите базу данных Aromatherapy. SQL Server отобразит список объектов базы данных в Details Pane.

    Использование мастера Database Maintenance Plan Wizard
    увеличить изображение

  • Нажмите кнопку Wizard (Мастер)Использование мастера Database Maintenance Plan Wizard на панели инструментов Enterprise Manager. SQL Server отобразит диалоговое окно Select Wizard.

    Использование мастера Database Maintenance Plan Wizard

  • В разделе Management (Управление) выберите Database Maintenance Plan Wizard (Мастер плана сопровождения базы данных). SQL Server отобразит первую страницу Database Maintenance Plan Wizard.

    Использование мастера Database Maintenance Plan Wizard

  • Нажмите Next (Далее). Мастер отобразит страницу, приглашающую выбрать базу данных, для которой вы хотите создать план сопровождения. После того, как вы выбрали базу данных Aromatherapy в дереве консоли Console Tree, при запуске мастера эта база данных будет выбрана по умолчанию, но вы можете изменить этот выбор, установив нужную вам опцию.

    Использование мастера Database Maintenance Plan Wizard

  • Нажмите Next (Далее). Мастер отобразит страницу, приглашающую выбрать оптимизацию при обновлении.

    Использование мастера Database Maintenance Plan Wizard

  • Нажмите Next (Далее). Мастер отобразит страницу с запросом, выполнять ли проверку целостности.

    Использование мастера Database Maintenance Plan Wizard

  • Нажмите Next (Далее). Мастер отобразит страницу, приглашающую вас выбрать план создания резервной копии базы данных. В этом упражнении мы примем все установки по умолчанию, изменив лишь расписание создания резервных копий.

    Использование мастера Database Maintenance Plan Wizard

  • Нажмите Change (Изменить) для изменения расписания создания резервных копий. Мастер отобразит диалоговое окно Edit Recurring Job Schedule (Изменить задание для расписания).

    Использование мастера Database Maintenance Plan Wizard

  • Выберите Monthly (Ежемесячно) в группе Occurs (Выполнять). Мастер изменит диалоговое окно для отображения опции ежемесячного резервирования.

    Использование мастера Database Maintenance Plan Wizard

  • С помощью кнопок выбора задайте создание резервных копий по первым воскресеньям каждого месяца.

    Использование мастера Database Maintenance Plan Wizard

  • Нажмите OK для возвращения в мастер Database Maintenance Plan Wizard.

    Использование мастера Database Maintenance Plan Wizard

  • Нажмите Next (Далее). Мастер отобразит страницу, приглашающую вас выбрать директорию для размещения резервной копии.


  • Совет. Если вы использовали мастер Database Maintenance Plan Wizard для составления расписания других работ и не выбрали опцию создания резервной копии, то эта страница не появится.

  • Выберите поле Use This Directory и затем нажмите кнопку Browse (Обзор)Использование мастера Database Maintenance Plan Wizard.Мастер отобразит диалоговое окно File Backup Directory (Директория для файла резервной копии).



    Использование мастера Database Maintenance Plan Wizard

  • Перейдите к директории, где установлены файлы упражнений и нажмите OK. Диалоговое окно File Backup Directory (Директория для файла резервной копии) будет закрыто.
  • Нажмите Next (Далее). Мастер отобразит страницу, запрашивающую, включать ли в план резервного копирования журнал транзакций.

    Использование мастера Database Maintenance Plan Wizard



  • Совет. Если вы хотите выполнить резервное копирование журнала транзакций (не всей базы данных), то вы сразу увидите эту страницу, а не страницу, приглашающую вас включить базу данных в план сопровождения.

  • Нажмите Next (Далее). Мастер отобразит страницу, с запросом о генерации отчета после выполнения плана.

    Использование мастера Database Maintenance Plan Wizard

  • Нажмите Next (Далее). Мастер отобразит страницу, с запросом о сохранении истории сопровождения на локальном сервере. В нашем примере мы примем установки по умолчанию.

    Использование мастера Database Maintenance Plan Wizard

  • Нажмите Next (Далее). Мастер Database Maintenance Plan Wizard отобразит страницу со списком всех ваших установок.

    Использование мастера Database Maintenance Plan Wizard

  • Нажмите Cancel (Отменить).


  • Примечание. Обычно для реализации плана сопровождения следует нажать Finish (Готово), но сейчас при работе с учебной базой данных нам этого не потребуется.

    Совет. План сопровождения будет присутствовать в дереве консоли Console Tree в папке Management. Вы можете просмотреть его и изменить, нажав на нем два раза в панели деталей Details Pane.


    Создание резервной копии базы данных


    SQL Server 2000 предоставляет несколько различных способов создания резервной копии базы данных. Простейшим из этих способов является создание полной резервной копии (full backup) – точная копия базы данных на какой-либо момент времени.
    Совет. SQL Server допускает создание резервной копии базы данных во время ее использования, так что вам не потребуется останавливать систему для этого. Тем не менее, некоторые типы операций не могут быть выполнены во время создания резервной копии. Это операции по изменению структуры базы данных – такие, как создание и удаление файлов или создание индексов, и выполнение нерегистрируемых операций.
    Второй тип создания резервной копии, предоставляемый SQL Server, называется дифференциальным резервированием (differential backup). При дифференциальном резервировании записывает только та информация, которая была изменена после полного последнего резервирования. Преимуществом дифференциального резервирования является то, что для выполнения этого процесса требуется намного меньше места, и при этом достигается большая скорость выполнения операции.
    Совет. Дифференциальное резервирование имеет смысл применять, только если был изменен небольшой процент данных. Например, вы можете делать дифференциальное резервирование каждый день, в то время как полное – один раз в неделю.
    Третий тип создания резервной копии, предоставляемый SQL Server, называется резервированием журнала транзакций (transaction log backup). В журнал транзакций записываются все транзакции, выполненные после последнего резервного копирования журнала транзакций.
    Совет. Резервирование журнала транзакций дает возможность восстанавливать состояние базы данных на определенный момент времени. Это может быть полезно, например, если ошибка оператора привела к вводу некорректной информации в базу данных. Вы можете использовать резервную копию журнала транзакций для восстановления состояния базы данных, которое она имела до ввода ошибочной информации.
    SQL Server использует резервирование журнала транзакций для восстановления базы данных автоматически, если происходит сбой сервера, и его также можно использовать в сочетании с полным резервированием и дифференциальным резервированием для восстановления системы. Преимуществом резервирования журнала транзакций является то, что в большинстве случаев получившийся резервный файл будет меньше, чем аналогичный при полном резервировании и дифференциальном резервировании.
    Совет. В некоторых случаях, резервная копия журнала транзакций может быть больше, чем резервная копия всей базы данных. Это возможно, если небольшая группа записей изменялась регулярно. В этом случае вы можете сделать полное резервирование или создавать резервную копию журнала транзакций чаще.
    Создайте резервную копию базы данных с помощью мастера Create Database Backup Wizard
    Внимание! Если вы еще не установили учебную базу данных Aromatherapy, то обратитесь к Введению, прежде чем продолжить изучение урока.


  • В дереве консоли Console Tree выберите базу данных Aromatherapy.

    SQL Server отобразит список объектов базы данных в панели деталей Details Pane.

    Создание резервной копии базы данных
    увеличить изображение

  • Нажмите кнопку Wizard (Мастер)Создание резервной копии базы данных в панели инструментов Enterprise Manager. SQL Server отобразит диалоговое окно Select Wizard (Выбор мастера).

    Создание резервной копии базы данных

  • Нажмите Backup Wizard (Мастер резервирования) в разделе Management (Управление). SQL Server отобразит первую страницу мастера создания резервной копии Create Database Backup Wizard.

    Создание резервной копии базы данных

  • Нажмите Next (Далее). Мастер отобразит страницу для выбора базы данных, которую вы хотите зарезервировать.

    Создание резервной копии базы данных





  • Создание резервной копии базы данных

  • Снимите флажок Check Media Set Name And Backup Set Expiration Date, чтобы SQL Server не проверял срок действия резервной копии.

    Создание резервной копии базы данных

  • Нажмите Next (Далее). Мастер отобразит страницу со списком сделанных вами установок.


  • Совет. SQL Server организовывает носители резервных копий в виде набора носителей. Набор носителей может быть либо одним дисковым файлом, либо множеством из 20 или более кассетных накопителей.

    Создание резервной копии базы данных

  • Нажмите Finish (Готово). Мастер Create Database Backup Wizard отобразит диалоговое окно хода выполнения резервного копирования. Вы увидите сообщение об успешном завершении операции резервного копирования.

    Создание резервной копии базы данных



  • Совет. Вы также можете сделать резервную копию базы данных, выбрав в контекстном меню базы данных пункт Backup Database (Резервирование базы данных). Эта опция отображает одиночное диалоговое окно быстрее, чем при использовании мастера Create Database Backup Wizard, а все опции при этом будут такими же.


    Пользователи базы данных


    Когда вы создаете новую учетную запись, с помощью Create Login Wizard и назначаете ей доступ в базу данных, учетная запись будет автоматически добавлена в список пользователей этой базы данных. Однако, может случиться, что вы создали новую базу данных и захотели добавить в нее существующую учетную запись в виде пользователя.
    Создайте пользователя базы данных
  • В базе данных Aromatherapy найдите значок Users. SQL Server отобразит список пользователей в панели детализации Details Pane.
    Пользователи базы данных
    увеличить изображение

  • Нажмите кнопку New (Создать)Пользователи базы данных в панели инструментов Enterprise Manager.
    Пользователи базы данных


  • Совет. Вы можете также открыть диалоговое окно Database User Properties (Свойства пользователя базы данных), нажав два раза на значке Users в дереве консоли Console Tree и выбрав из контекстного меню New Database User (Новый пользователь базы данных).
  • В поле списка выберите вашу учетную запись. SQL Server предполагает по умолчанию использовать в качестве имени учетной записи имя пользователя, но при желании вы можете изменить его.
  • Добавьте db_owner в качестве роли для нового пользователя.
    Пользователи базы данных

  • Нажмите OK. SQL Server добавит пользователя к базе данных.

  • Совет. Роли, которые назначаются пользователю базы данных, определяют, какие привилегии безопасности этот пользователь будет иметь для базы данных. За дополнительной информацией по этому вопросу, обратитесь к разделу "Роли базы данных".
    Удалите пользователя базы данных
  • В базе данных Aromatherapy найдите значок Users. SQL Server отобразит список пользователей в панели детализации Details Pane.
    Пользователи базы данных
    увеличить изображение

  • Выберите пользователя, которого вы создали в предыдущем упражнении, и нажмите кнопку Delete (Удалить). SQL Server отобразит окно сообщение для подтверждения удаления.
    Пользователи базы данных

  • Нажмите Yes (Да). SQL Server удалит пользователя из базы данных.



  • Роли базы данных


    Роль базы данных – является виртуальным пользователем, которого вы создали для управления доступом в базу данных. Роли может быть назначено любое число пользователей базы данных, а определенному пользователю может соответствовать множество ролей. Когда вы устанавливаете привилегии для роли базы данных, а затем назначаете пользователя этой роли, то при этом пользователь получает все привилегии указанной роли. Это намного проще, чем обслуживать привилегии отдельного пользователя. В таблице 3-2 представлены роли, которые доступны в SQL Server 2000. Вы также можете создавать свои роли, которые будут уникальными для вашей базы данных.
    Совет. Роли базы данных, которые вы создадите в базе данных master, будут добавляться в любую новую базу данных, которую вы создадите для этого сервера.

    Таблица 3-2. Полное имяИмяОписание
    Access Administrator (Администратор доступа)db_accessadminМожет удалять или добавлять ID-идетификаторы пользователя.
    Backup Operator (Оператор резервного копирования)db_backupoperatorМожет выдавать операторы DBCC, CHECKPOINT, BACKUP.
    Data Reader (Чтение данных)db_datareaderМожет выбирать все данные из любой таблицы пользователя в базе данных.
    Data Writer (Запись данных)db_datawriterМожет модифицировать данные из любой таблицы пользователя в базе данных.
    Data Definition Administrator (Администратор описания данных)db_ddladminМожет выполнять операторы языка описания данных Data Definition Language (DLL), но не может выдавать операторы GRANT, REVOKE, DENY.
    Deny Data Reader (Запрет чтения данных)db_denydatareaderМожет запрещать или отменять полномочия SELECT для любых объектов базы данных.
    Deny Data Writer(Запрет записи данных)db_denydatawriterМожет запрещать или отменять полномочия INSERT, UPDATE и DELETE для любых объектов базы данных.
    Database Owner (Владелец базы данных)db_ownerИмеет все полномочия в базе данных.
    Security Administrator (Администратор безопасности)db_securityadminМожет управлять всеми полномочиями, объектами, ролями и элементами ролей пользователей.
    Public (Общая)Роль по умолчанию, к которой принадлежат все пользователи базы данных.


    Создайте роль базы данных

  • В дереве консоли Console Tree в базе данных Aromatherapy нажмите на значке Roles. SQL Server отобразит список всех существующих ролей базы данных.

    Роли базы данных
    увеличить изображение

  • Нажмите на значке New (Создать)Роли базы данных в панели инструментов Enterprise Manager. SQL Server отобразит диалоговое окно Database Role Properties (Свойства роли базы данных).

    Роли базы данных

  • Введите в качестве имени роли: урок 3.

    Роли базы данных

  • Нажмите OK. SQL Server закроет диалоговое окно Database Role Properties (Свойства роли базы данных).
  • В панели деталей Details Pane дважды щелкните на роли урок 3. SQL Server снова откроет диалоговое окно Database Role Properties (Свойства роли базы данных).

    Роли базы данных



  • Примечание. Вы должны закрыть и снова открыть диалоговое окно Database Role Properties (Свойства роли базы данных), чтобы иметь возможность воспользоваться кнопкой Permissions (Разрешения).

  • Нажмите кнопку Permissions (Разрешения). SQL Server отобразит диалоговое окно Permissions (Разрешения).

    Роли базы данных



  • Совет. Диалоговое окно Database Role Properties (Свойства роли базы данных) поддерживает два типа ролей: стандартные роли (standard roles) и роли приложения (application roles). Роли, рассматриваемые в этом уроке, являются стандартными ролями. Роль приложения является специальной функцией, поддерживающей требования сложных приложений. За дополнительной информацией о ролях приложений обратитесь к разделу "Установка режима безопасности для приложений и ролей приложений" в SQL Server Books Online (онлайновая книга по SQL Server 2000).

  • В таблице Oils задайте для роли разрешение Select.

    Роли базы данных

  • Нажмите OK. SQL Server закроет диалоговое окно Permissions (Разрешения).
  • Нажмите OK. SQL Server добавит новую роль.




  • Роли базы данных

  • В окне со списком Database Role Membership (Элементы роли базы данных) нажмите на роль урок 3 для добавления пользователя.

    Роли базы данных

  • Нажмите OK. SQL Server добавит пользователя в роль и закроет диалоговое окно Database User Properties (Свойства пользователя базы данных).


  • Удалите пользователя из роли базы данных

  • В дереве консоли Console Tree в базе данных Aromatherapy найдите значок Users. SQL Server отобразит список пользователей в панели деталей Details Pane.

    Роли базы данных
    увеличить изображение

  • В списке пользователей дважды щелкните на вашем имени пользователя. SQL Server отобразит диалоговое окно Database User Properties (Свойства пользователя базы данных).

    Роли базы данных

  • В списке Database Role Membership (Элементы роли базы данных) снимите выделение для роли урок 3.

    Роли базы данных

  • Нажмите OK. SQL Server удалит пользователя из роли и закроет диалоговое окно.


  • Удалите роль базы данных

  • В дереве консоли Console Tree для базы данных Aromatherapy найдите значок Roles. SQL Server отобразит список ролей в панели деталей Details Pane.

    Роли базы данных
    увеличить изображение

  • В панели деталей Details Pane выберите роль урок 3 и нажмите кнопку Delete (Удалить). SQL Server отобразит сообщение для подтверждения удаления.

    Роли базы данных

  • Нажмите Yes (Да). SQL Server удалит роль из базы данных.



  • Роли сервера


    Роли сервера, к которым назначаются учетные записи, определяют, какие привилегии безопасности будет иметь учетная запись. В таблице 3-1 описываются привилегии для каждой роли.

    Таблица 3-1. Полное имяИмяОписание
    Bulk Insert Administrators (Администраторы сплошной вставки данных)bulkadminМожет выполнять операции вставки типа "bulk insert".
    Database Creators (Создатели баз данных)dbcreatorМожет создавать, изменять или прекращать работу баз данных.
    Disk Administrators (Администраторы диска)diskadminМожет управлять файлами диска.
    Process Administrators (Администраторы процесса)processadminМожет управлять процессами, запущенными в SQL Server.
    Security Administrators (Администраторы безопасности)securityadminМожет управлять учетными записями и разрешениями CREATE DATABASE, а также читать журнал ошибок.
    Server Administrators (Администраторы сервера)serveradminМожет управлять конфигурированием всего сервера и выключать его.
    Setup Administrators (Администраторы настройки)setupadminМожет управлять связанными серверами, процедурами, автоматически выполняющимися при запуске, и хранимыми процедурами.
    System Administrators (Системные администраторы)sysadminМожет выполнять любые действия в SQL Server.
  • Добавьте для учетной записи базу данных Aromatherapy.
    Роли сервера

  • Нажмите Next (Далее). Мастер отобразит страницу со списком сделанных вами установок.
    Роли сервера


  • Примечание. Учетные записи, принадлежащие определенным ролям сервера (в частности роли System Administrators) будут иметь привилегии для доступа ко всем базам данных, независимо от того, были ли они назначены этой учетной записи или нет.
  • Нажмите Finish (Готово). Мастер Create Login Wizard отобразит сообщение об успешном добавлении учетной записи.
    Роли сервера



  • Роли сервера

  • В разделе Database ( База данных) выберите Create Login Wizard (Мастер создания учетной записи) и нажмите на OK. SQL Server отобразит первую страницу мастера Create Login Wizard.

    Роли сервера

  • Нажмите Next (Далее). Мастер отобразит страницу, приглашающую вас выбрать для сервера режим аутентификации учетной записи. Примите установки по умолчанию.

    Роли сервера

  • Нажмите Next (Далее). Мастер отобразит страницу, запрашивающую у вас идентификатор учетной записи Windows ID.

    Роли сервера

  • Введите идентификатор учетной записи Windows ID в поле формы: имя домена \ имя учетной записи (имя учетной записи может быть именем пользователя или группы). Нажмите Next (Далее). Мастер отобразит страницу, приглашающую выбрать роли безопасности, к которым будет назначена учетная запись.


  • Совет. Опция Deny Access To Server (Запретить доступ к серверу) на этой странице может быть использована только для запрещения доступа для индивидуального пользователя или группы.

    Роли сервера

  • Добавьте учетную запись к роли Database Creators (Создатели баз данных).

    Роли сервера

  • Нажмите Next (Далее). Мастер отобразит страницу, приглашающую вас выбрать базу данных, к которой эта учетная запись будет иметь доступ.

    Роли сервера

  • Добавьте для учетной записи базу данных Aromatherapy.

    Роли сервера

  • Нажмите Next (Далее). Мастер отобразит страницу со списком сделанных вами установок.

    Роли сервера



  • Примечание. Учетные записи, принадлежащие определенным ролям сервера (в частности роли System Administrators) будут иметь привилегии для доступа ко всем базам данных, независимо от того, были ли они назначены этой учетной записи или нет.

  • Нажмите Finish (Готово). Мастер Create Login Wizard отобразит сообщение об успешном добавлении учетной записи.

    Роли сервера




  • Создание учетной записи пользователя


    Учетные записи могут быть созданы вручную с помощью нажатия на значке Logins в папке Security сервера и выбором в контекстном меню New Login (Создать учетную запись). Однако проще будет сделать это с использованием мастера создания учетной записи Create Login Wizard.
    Создайте учетную запись SQL Server
  • В дереве консоли Console Tree выберите сервер. SQL Server отобразит в панели деталей Details Pane список объектов сервера.
    Создание учетной записи пользователя
    увеличить изображение

  • Нажмите на кнопку Wizard (Мастер)Создание учетной записи пользователя в панели инструментов Enterprise Manager. SQL Server отобразит диалоговое окно Select Wizard (Выбор мастера).
    Создание учетной записи пользователя

  • В разделе Database (База данных) выберите Create Login Wizard (Мастер создания учетной записи) и нажмите OK. SQL Server отобразит первую страницу мастера Create Login Wizard.
    Создание учетной записи пользователя

  • Нажмите Next (Далее). Мастер отобразит страницу, приглашающую вас выбрать режим аутентификации сервера для учетной записи.
    Создание учетной записи пользователя

  • Выберите опцию под названием SQL Server Login Information That Was Assigned To Me By The System Administrator (SQL Server Authentication). При этом будет использоваться информация об учетной записи, назначенная вам системным администратором.
    Создание учетной записи пользователя




  • Управление учетными записями


    Подобно тому, как вам периодически приходится обслуживать некоторые другие объекты базы данных, вам может потребоваться изменить свойства учетной записи пользователя. Например, вы захотите изменить роль безопасности, которой назначена учетная запись или, например, изменить базу данных, к которой имеет доступ учетная запись. Наконец, вам может понадобится окончательно удалить запись. Все эти операции легко выполнить с помощью Enterprise Manager.
    Измените свойства учетной записи
  • В дереве консоли Console Tree в папке Security найдите значок Logins. SQL Server отобразит список учетных записей в панели деталей Details Pane.
    Управление учетными записями
    увеличить изображение

  • В панели деталей Details Pane нажмите два раза на учетной записи. SQL Server отобразит диалоговое окно SQL Server Login Properties (Свойства учетной записи SQL Server).
    Управление учетными записями

  • Выберите вкладку Server Roles (Роли сервера). SQL Server отобразит роли сервера, к которым будет назначена учетная запись.
    Управление учетными записями

  • Удалите учетную запись из роли System Administrators.
    Управление учетными записями

  • Выберите вкладку Database Access (Доступ к базе данных). SQL Server отобразит базы данных, к которым учетная запись имеет доступ.
    Управление учетными записями

  • Добавьте Northwind к списку баз данных.
    Управление учетными записями

  • Нажмите OK. Диалоговое окно SQL Server Login Properties (Свойства учетной записи SQL Server) закроется. SQL Server изменит свойства учетной записи.

  • Удалите учетную запись
  • В дереве консоли Console Tree в папке Security найдите значок Logins. SQL Server отобразит список учетных записей в панели деталей Details Pane.
    Управление учетными записями
    увеличить изображение

  • Выберите учетную запись TestID в Details Pane и нажмите кнопку Delete (Удалить). SQL Server отобразит сообщение с запросом для подтверждения удаления записи.
    Управление учетными записями

  • Нажмите Yes (Да). SQL Server удалит учетную запись.



  • Создание новой базы данных


    Хотя можно создать новую базу данных с помощью команды New Database (Новая база данных) из контекстного меню папки Databases (Базы данных), проще это сделать, воспользовавшись мастером создания базы данных Create Database Wizard.
    Создайте новую базу данных
  • Найдите папку Databases на сервере, который вы используете для выполнения упражнений и уроков из этого курса. SQL server отобразит список баз данных в рабочей панели Details Pane.
    Создание новой базы данных
    увеличить изображение

  • Щелкните на кнопке Wizard (Мастер)Создание новой базы данных в панели инструментов Enterprise Manager. SQL server отобразит диалоговое окно Select Wizard (Выбор мастера).
    Создание новой базы данных

  • Выберите мастер Create Database Wizard из раздела Database и нажмите ОК. SQL server отобразит первую страницу мастера.
    Создание новой базы данных

  • Нажмите Next (Далее). Мастер Create Database Wizard отобразит страницу, запрашивающую имя и местонахождение новой базы данных.
    Создание новой базы данных

  • Введите урок 4 в поле Database Name (Имя базы данных).
  • Щелкните на кнопке Browse (Обзор) Создание новой базы данных, чтобы изменить место размещения файла базы данных. Мастер отобразит диалоговое окно, запрашивающее новое местонахождение.
    Создание новой базы данных


  • Размещение файла базы данных
    При первой установке SQL Server для новых баз данных по умолчанию принимается место размещения MSSQL\data в папке, в которой установлен сервер. Эта настройка по умолчанию предоставляется мастеру создания базы данных Create Database Wizard. Чтобы изменить эту используемую по умолчанию установку, вы можете задать новое место размещения на вкладке Database Settings (Параметры базы данных) в диалоговом окне SQL Server Properties (Свойства SQL Server). Для этого следует щелкнуть правой кнопкой мыши на сервере в дереве консоли Console Tree, выбрать Properties (Свойства), а затем открыть вкладку Database Settings (Параметры базы данных).
    Создание новой базы данных

    Создание новой базы данных

  • Перейдите к папке SQL 2000 Step by Step в корневой директории, а затем нажмите ОК. Мастер установит место размещения файла журнала транзакций в соответствии с выбранной директорией.

    Создание новой базы данных

  • Нажмите Next (Далее). Мастер отобразит страницу, запрашивающую имя и начальный размер файла базы данных.
  • Нажмите Next (Далее). Мастер отобразит страницу, на которой вы можете выбрать, Automatically Grow The Database Files (Автоматическое увеличение размера файлов базы), либо вы сами увеличиваете их и соответственно выбираете опцию Do Not Automatically Grow The Database Files. В этом упражнении примем установки по умолчанию.

    Создание новой базы данных

  • Нажмите Next (Далее). Мастер отобразит страницу, запрашивающую имя и начальный размер журнала транзакций. Примите установку по умолчанию.

    Создание новой базы данных

  • Нажмите Next (Далее). Мастер отобразит страницу, позволяющую вам выбрать, должен ли размер файла журнала транзакций увеличиваться автоматически. Примите установки по умолчанию.

    Создание новой базы данных

  • Нажмите Next (Далее). Мастер отобразит страницу, подтверждающую сделанный вами выбор параметров.

    Создание новой базы данных

  • Нажмите Finish (Готово). Мастер создаст файлы базы данных и журнала транзакций, а затем спросит, хотите ли вы создать план сопровождения для новой базы данных.

    Создание новой базы данных

  • Нажмите No (Нет). Мастер завершит свою работу.



  • Установка свойств базы данных


    Когда вы создаете базу данных с помощью мастера Create Database Wizard, вы указываете определенные характеристики, или свойства, базы данных, такие как имя базы данных и место размещения. После создания базы данных вы можете поменять эти свойства, изменив соответствующие параметры в диалоговом окне Properties (Свойства).
    Например, увеличение размера физического файла – это довольно серьезная операция, выполнение которой может привести к увеличению времени отклика сервера. Если вы обнаружите, что SQL Server приходится слишком часто увеличивать размер файла. Вам следует учитывать возможность изменения процента увеличения размера файла в диалоговом окне Properties (Свойства), чтобы сервер смог увеличивать размер файла более, чем на 10% (установка по умолчанию).
    Как изменить процент увеличения размера файла
  • Выберите базу данных урок 4 в дереве консоли Console Tree.
  • Нажмите кнопку Properties (Свойства)Установка свойств базы данных в панели инструментов. SQL Server отобразит диалоговое окно Properties (Свойства) для базы данных.
    Установка свойств базы данных

  • Откройте вкладку Data Files (Файлы данных). SQL Server отобразит свойства файлов данных базы данных.
    Установка свойств базы данных

  • Установите процент увеличения 20%.
    Установка свойств базы данных

  • Нажмите ОК. SQL Server установит новое свойство и закроет диалоговое окно Properties (Свойства).



  • Добавление столбцов в таблицу


    Хотя таблица сама по себе обладает определенными свойствами, такими как имя, которое мы предоставили в последнем упражнении, в первую очередь таблица определяется столбцами, которые в ней содержатся.
    Добавьте в таблицу столбец числовых значений
  • Введите MyNumber в ячейку имени столбца Column Name, а затем нажмите клавишу Tab. SQL Server предлагает использование типа данных char.
    Добавление столбцов в таблицу

  • Измените тип данных на decimal. SQL Server изменит длину столбца на 9 и разрешит использование полей Precision, Scale и Identity.
    Добавление столбцов в таблицу

  • Введите Образец столбца числовых значений в ячейку описания Description.
  • Измените общее количество знаков числа (поле Precision) на 5, а количество знаков после запятой (поле Scale) на 2. SQL Server изменит длину столбца на 5, чтобы отразить новое количество знаков в числе.
    Добавление столбцов в таблицу


  • Описание столбца
    Новая функциональная возможность Enterprise Manager – добавление описания к столбцу, относится к расширенным свойствам в SQL Server 2000. Ряд расширенных свойств, таких как описание столбца, были созданы Microsoft как составная часть стандартной установки сервера, и вы можете создавать дополнительные расширенные свойства для хранения специфичной для приложения или для сайта информации об объектах базы данных.
    Каждое расширенное свойство обладает задаваемым пользователем именем и значением. Значение расширенного свойства имеет тип sql_variant и может содержать до 7500 байт данных. Вы можете определить несколько расширенных свойств для любого объекта с использованием хранимых процедур. Подробнее о хранимых процедурах вы узнаете в уроке 28.
    Точность и масштаб
    Точность (precision) числового значения представляет собой максимальное количество десятичных разрядов, которые представляют значение, как слева, так и справа от десятичной точки. Масштаб (scale) значения представляет собой количество знаков справа от десятичной точки. Например, значение 3647,311 имеет точность 7 (общее количество знаков) и масштаб 3 (количество знаков справа от десятичной точки).
    Важно понимать, что точность и масштаб числового значения не влияют на длину столбца. Длина столбца определяется типом данных. Точность и масштаб определяют, как SQL Server будет интерпретировать данные, хранящиеся в столбце.

    Добавление столбцов в таблицу

  • Измените тип данных на decimal. SQL Server изменит длину столбца на 9 и разрешит использование полей Precision, Scale и Identity.

    Добавление столбцов в таблицу

  • Сбросьте флажок Allow Null (Разрешить нулевое значение).


  • Нулевое значение (Null)

    Значение Null представляет собой особый вид значений в реляционной технологии, которое используется для указания, что значение либо отсутствует, либо не существует. Использование значений типа Null в ряде случаев является сомнительным и спорным.

  • Введите в ячейку описания Description текст Образец столбца идентификации.
  • Измените значение поля Identity на Yes (Not For Replication). SQL Server предлагает для полей начального значения Identity Seed и приращения Identity Increment значение 1.

    Добавление столбцов в таблицу



  • Идентификационные значения

    Когда вы устанавливаете свойство идентификации Identity для столбца, вы тем самым предписываете SQL Server вставить в столбец значение, которое уникально идентифицирует каждую строку. Выбранный тип данных задает природу данных, содержащихся в столбце. Идентификационные столбцы могут иметь типы данных int, smallint, tinyint или decimal.

    Когда SQL Server вставляет строку в таблицу, имеющую столбец идентификации, он автоматически генерирует значения для столбца на основе последнего использованного значения (начиная с начального) и приращения идентификатора, заданного при создании таблицы.

    Например, если для столбца идентификации задан тип smallint, начальное значение равно 50, а приращение равно 5, для первой вставленной строки будет присвоено значение 50, для второй строки – значение 55, для третьей строки – значение 60 и т.д.

    Свойство Identity может быть установлено только для одного столбца в таблице.

    Добавьте в таблицу столбец GUID

  • Щелкните на пустой ячейке в столбце Column Name, введите MyGUID, а затем нажмите клавишу Tab. SQL Server предлагает в качестве типа данных char.

    Добавление столбцов в таблицу

  • Измените тип данных на uniqueidentifier. SQL Server изменит длину столбца на 16 и разрешит использование поля Is RowGUID.

    Добавление столбцов в таблицу

  • Введите в ячейку описания Description текст Образец GUID.
  • Измените значение поля Is RowGUID на Yes. SQL Server установит значение по умолчанию (Newid()).



    Добавление столбцов в таблицу



  • GUID

    Глобальный уникальный идентификатор (Globally Unique Identifier – GUID) представляет собой 16-байтное уникальное значение – ни один другой в мире компьютер не будет генерировать это значение. Тип данных uniqueidentifier используется для хранения GUID-идентификаторов.

    SQL Server не генерирует GUID-идентификаторы автоматически, как он это делает для идентификационных значений, поскольку таблица может содержать несколько GUID-идентификаторов, но только одно идентификационное значение. Тем не менее, функция NEWID, которую SQL Server предлагает как значение по умолчанию, если для свойства Is RowGUID установлено значение Yes (Да), будет возвращать новый GUID-идентификатор при вставке строки.

    Добавьте в таблицу столбец даты

  • Щелкните на пустой ячейке в столбце Column Name, введите MyDate, а затем нажмите клавишу Tab. SQL Server предлагает тип данных char.

    Добавление столбцов в таблицу

  • Измените тип данных на datetime. SQL Server изменит длину столбца на 8.

    Добавление столбцов в таблицу

  • Введите Образец столбца даты в ячейку описания Description.

    Добавление столбцов в таблицу



  • Добавьте в таблицу символьный столбец

  • Щелкните на пустой ячейке в столбце Column Name, введите MyChar, а затем нажмите клавишу Tab. SQL Server предлагает тип данных char.

    Добавление столбцов в таблицу



  • Символьные типы данных

    SQL Server поддерживает два различных вида символьных столбцов: с фиксированной длиной и с переменной длиной, каждый из которых может содержать данные либо в формате Unicode, либо не в формате Unicode, а также иметь три различные длины. Unicode представляет собой метод кодирования символов, поддерживающий двухбайтное выражение символов.

    Если для столбца объявлена переменная длина (например, тип varchar или text для данных не-Unicode, и nvarchar или ntext для данных Unicode), то SQL Server будет хранить только фактические символы данных, которые были введены. Если, с другой стороны, для столбца объявлена фиксированная длина (тип char для данных не-Unicode или nchar для данных Unicode). SQL Server будет дополнять введенные значения пробелами.

    Например, если для столбца объявлен тип char с длиной, равной 10, а фактическим значением является "hello", SQL Server будет хранить значение как "hello", с пятью пробелами, следующими за пятью фактическими символами.

  • Измените длину столбца на 25.
  • Введите Образец символьного столбца в ячейку описания Description.
  • Введите 'Unknown' в ячейку значения по умолчанию Default value. (Не забудьте заключить слово в одинарные кавычки.)



    Добавление столбцов в таблицу



  • Значения по умолчанию

    Значение по умолчанию представляет собой значение, которое будет помещаться в столбец, если пользователь явно не задал значение.

    Мы уже сталкивались с двумя специальными видами значений по умолчанию: идентификационное значение, предоставляемое SQL Server, когда вы устанавливаете свойство Identity, а также функция NEWID, предоставляемая SQL Server, когда вы устанавливаете свойство Is RowGuid. В действительности вы можете задавать значения по умолчанию для любого столбца. Значения по умолчанию могут быть константами, такими как 'Unknown' или 123, функциями, такими как NEWID или GETDATE, либо математическими выражениями, такими как 3 + 5.

    Сохраните и закройте таблицу

  • Нажмите кнопку Save (Сохранить)Добавление столбцов в таблицу на панели инструментов конструктора таблиц Table Designer. SQL Server сохранит определение таблицы.
  • Закройте окно.



  • Изменение столбцов


    Вы можете повторно открыть конструктор таблиц Table Designer для таблицы, щелкнув правой кнопкой мыши на имени таблицы в рабочей панели Details Pane и выбрав Design Table (Конструирование таблицы) из контекстного меню. После того, как конструктор таблиц будет открыт, вы можете изменить свойства имеющихся столбцов, удалять их или добавлять новые.
    Переименуйте столбец
  • Выберите папку Tables для базы данных Aromatherapy в дереве консоли Console Tree. SQL Server отобразит список таблиц в рабочей панели Details Pane.
    Изменение столбцов
    увеличить изображение

  • Щелкните правой кнопкой мыши на таблице урок 5 в рабочей панели Details Pane и выберите Design Table (Конструирование таблицы). SQL Server откроет конструктор таблиц Table Designer.
    Изменение столбцов

  • Выделите MyChar в ячейке Column Name и введите MyCharacter.SQL Server изменит имя столбца.
    Изменение столбцов

  • Нажмите кнопку Save (Сохранить) в панели инструментов конструктора таблиц Table Designer, чтобы сохранить изменения.

  • Удалите столбец
  • Выделите столбец MyDate, щелкнув на сером прямоугольнике слева от имени столбца.
    Изменение столбцов

  • Нажмите клавишу Delete. SQL Server удалит столбец.
    Изменение столбцов

  • Нажмите кнопку Save (Сохранить), чтобы сохранить изменения.
  • Закройте окно конструктора таблиц.



  • Изменение таблиц


    Помимо изменения определений столбцов таблицы Enterprise Manager облегчает переименование таблиц и удаление таблиц из базы данных.
    Переименуйте таблицу
  • Перейдите к папке Tables базы данных Aromatherapy в дереве консоли Console Tree. SQL Server отобразит список таблиц в рабочей панели Details Pane.
    Изменение таблиц
    увеличить изображение

  • Щелкните правой кнопкой мыши на таблице урок 5 в рабочей панели Details Pane и выберите Rename (Переименовать). 3. Введите Новый урок 5 и нажмите Enter. SQL Server отобразит диалоговое окно Rename (Переименование), предупреждающее, что изменение имени таблицы сделает невозможными все ссылки на нее из других объектов.
    Изменение таблиц

  • Нажмите кнопку View Dependencies (Просмотр зависимостей), чтобы отобразить все объекты, которые может затронуть изменение. SQL Server откроет диалоговое окно Dependencies (Зависимости).
    Изменение таблиц

  • Нажмите Close (Закрыть), чтобы закрыть диалоговое окно.
  • Нажмите Yes (Да) в диалоговом окне Rename (Переименование). SQL Server отобразит сообщение. Подтверждающее успешное выполнение изменения имени.
    Изменение таблиц


  • Удалите таблицу
  • Выделите таблицу Новый урок 5 в панели детализации Detail Pane.
  • Нажмите клавишу Delete. SQL Server отобразит диалоговое окно Drop Objects (Удаление объектов).
    Изменение таблиц


  • Совет. Вы можете щелкнуть на кнопке Show Dependencies (Показать зависимости), чтобы увидеть все объекты, на которые повлияет удаление таблицы.
  • Нажмите Drop All (Убрать все). SQL Server удалит таблицу из базы данных.

  • Примечание. Когда вы удаляете таблицу, таблица и все ее данные окончательно убираются из базы данных. Единственный способ восстановить ее – это воспользоваться резервной копией.


    Создание новой таблицы


    Таблицы создаются и обслуживаются с помощью конструктора таблиц Table Designer Enterprise Manager. Первым шагом является создание и присвоение имени таблицы путем открытия конструктора таблиц Table Designer для новой таблицы.
    Создайте новую таблицу
  • Перейдите к папке Tables базы данных Aromatherapy. SQL Server отобразит список имеющихся таблиц.
    Создание новой таблицы
    увеличить изображение

  • Нажмите кнопку New (Создать)Создание новой таблицы в панели инструментов. SQL Server откроет конструктор таблиц Table Designer.
    Создание новой таблицы

  • Нажмите кнопку Properties (Свойства)Создание новой таблицы в панели инструментов. SQL Server откроет диалоговое окно Properties (Свойства) для таблицы.
    Создание новой таблицы

  • Измените имя таблицы на урок 5.
    Создание новой таблицы

  • Нажмите Close (Закрыть). SQL Server закроет диалоговое окно Properties (Свойства).



  • Изменение индексов


    Точно так же, как вы изменяете свойства столбца, открыв конструктор таблиц Table Designer и отобразив диалоговое окно Properties (Свойства) для таблицы, вы можете изменять и свойства индекса.
    Переименуйте индекс
  • Откройте конструктор таблиц Table Designer для таблицы Oils, щелкнув правой кнопкой на имени таблицы в рабочей панели Details Pane и выбрав Design Table (Конструирование таблицы). SQL Server откроет конструктор таблиц Table Designer.
    Изменение индексов

  • Щелкните на кнопке Indexes/Keys (Индексы/Ключи).Изменение индексов SQL Server откроет диалоговое окно Properties (Свойства) с отображением страницы свойств Indexes/Keys (Индексы/Ключи).
    Изменение индексов

  • Выберите IX_OilName в поле списка Selected Index (Выбор индекса). SQL Server отобразит свойства индекса.
    Изменение индексов

  • Измените имя индекса на IX_Name.
    Изменение индексов

  • Нажмите Close (Закрыть). SQL Server закроет диалоговое окно.
  • Щелкните на кнопке Save (Сохранить) в панели инструментов конструктора таблиц, чтобы сохранить изменения.



  • Создание индексов


    В Enterprise Manager индексы могут быть созданы с помощью мастера Create Index Wizard или с использованием конструктора таблиц Table Designer либо путем установки свойства Primary Key, либо путем определения индекса в диалоговом окне Properties (Свойства).
    Создайте индекс с использованием мастера Create Index Wizard
  • Найдите базу данных Aromatherapy в дереве консоли Console Tree. SQL Server отобразит список объектов базы данных в рабочей панели Details Pane.
    Создание индексов
    увеличить изображение

  • Щелкните на кнопке Wizard (Мастер)Создание индексов в панели инструментов Enterprise Manager. SQL Server отобразит диалоговое окно Select Wizard (Выбор мастера).
    Создание индексов

  • Выберите Create Index Wizard в разделе Database, а затем нажмите ОК. SQL Server отобразит первую страницу мастера создания индексов Create Index Wizard.
    Создание индексов

  • Нажмите Next (Далее). Мастер отобразит страницу, запрашивающую базу данных и таблицу, для которой будет создан индекс.
    Создание индексов

  • Убедитесь, что в качестве имени базы данных выбрано Aromatherapy, и выберите в качестве имени таблицы Oils.
    Создание индексов

  • Нажмите Next (Далее). Мастер отобразит имеющиеся для таблицы индексы. (Индексы с несколько странными именами создаются SQL Server, чтобы использовать их для отношений. Об отношениях мы поговорим в следующем уроке.)
    Создание индексов

  • Нажмите Next (Далее). Мастер отобразит столбцы, имеющиеся в таблице.
    Создание индексов

  • Щелкните на ячейках Include In Index столбцов OilName и LatinName, чтобы включить их в индекс.
    Создание индексов

  • Нажмите Next (Далее). Мастер отобразит страницу, предлагающую выбрать свойства для индекса.
    Создание индексов

  • Примите предложенные по умолчанию значения, щелкнув на кнопке Next (Далее). Мастер отобразит страницу, подтверждающую ваш выбор и запрашивающую имя для индекса. Примите значение по умолчанию.
    Создание индексов

  • Выделите поле LatinName и щелкните на кнопке Move Up (Повысить), чтобы изменить порядок полей в индексе.
    Создание индексов

  • Нажмите Finish (Готово). Мастер отобразит сообщение, подтверждающее, что индекс был создан.
    Создание индексов



  • Создание индексов
    увеличить изображение

  • Откройте конструктор таблиц Table Designer для таблицы PlantTypes, щелкнув правой кнопкой мыши на имени таблицы в рабочей панели Details Pane, и выберите Design Table (Конструирование таблицы). SQL Server откроет конструктор таблиц Table Designer.

    Создание индексов

  • Выберите столбец PlantTypeID в сетке, щелкнув слева от имени столбца. SQL Server выделит столбец.

    Создание индексов

  • Щелкните на кнопке Primary Key (Первичный ключ)Создание индексов в панели инструментов конструктора таблиц. SQL Server установит выделенный столбец в качестве первичного ключа.

    Создание индексов

  • Нажмите кнопку Save (Сохранить),Создание индексов чтобы сохранить изменения и закрыть окно.


  • Создайте простой индекс

  • Откройте конструктор таблиц Table Designer для таблицы Oils, щелкнув правой кнопкой на имени таблицы в рабочей панели Details Pane и выбрав Design Table (Конструирование таблицы). SQL Server откроет конструктор таблиц Table Designer.

    Создание индексов

  • Щелкните на кнопке Indexes/Keys (Индексы/Ключи).Создание индексов SQL Server откроет диалоговое окно Properties (Свойства) для таблицы, в которой будет отображена страница свойств Indexes/Keys (Индексы/Ключи).

    Создание индексов



  • Совет. Вы также можете открыть диалоговое окно Properties (Свойства) для таблицы, щелкнув на кнопке Properties (Свойства),Создание индексов а затем открыв вкладку Indexes/Keys (Индексы/Ключи).

  • Нажмите New (Создать). SQL Server предложит IX_Oils в качестве имени индекса и OilID в качестве индексируемого столбца.

    Создание индексов

  • Измените имя индекса на IX_OilName.

    Создание индексов

  • Измените имя индексируемого столбца на OilName, выбрав этот столбец из списка.

    Создание индексов

  • Установите флажок Create UNIQUE (Создать как уникальный), чтобы создать уникальный индекс. SQL Server разрешит установку опций в группе Create UNIQUE.

    Создание индексов

  • Установите опцию Index (Индекс).

    Создание индексов



  • Уникальные индексы

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

    Следует проявлять осторожность при создании уникальных индексов для столбцов, которые допускают использование нулевых значений (NULL). SQL Server разрешит использование только одной строки со значением NULL; все последующие строки будут отвергнуты как строки-дубликаты.

  • Нажмите кнопку Close (Закрыть). SQL Server закроет диалоговое окно.
  • Щелкните на кнопке Save (Сохранить) в панели инструментов конструктора таблиц, чтобы сохранить изменения, а затем закройте окно конструктора таблиц Table Designer.




  • Создайте составной индекс

  • Откройте конструктор таблиц Table Designer для таблицы OilOdors, щелкнув правой кнопкой мыши на имени таблицы в рабочей панели Details Pane и выбрав Design Table (Конструирование таблицы). SQL Server откроет конструктор таблиц Table Designer.

    Создание индексов

  • Щелкните на кнопке Indexes/Keys (Индексы/Ключи).Создание индексов SQL Server откроет диалоговое окно Properties (Свойства) с отображением страницы свойств Indexes/Keys (Индексы/Ключи).

    Создание индексов

  • Нажмите New (Создать). SQL Server предложит IX_OilOdors в качестве имени индекса, и OilID в качестве индексируемого столбца.

    Создание индексов

  • Добавьте столбец OdorID в индекс, щелкнув на ячейке Column Name и выбрав его в поле со списком.

    Создание индексов

  • Нажмите кнопку Close (Закрыть). SQL Server закроет диалоговое окно.
  • Щелкните на кнопке Save (Сохранить) в панели инструментов конструктора таблиц, чтобы сохранить изменения, а затем закройте окно Table Designer.



  • Удаление индексов


    Иногда необходимо удалить индекс из таблицы, поскольку он вам либо уже не нужен, либо преимущества, которые обеспечивает применение индекса для ускорения извлечения данных, сводятся на нет дополнительными затратами времени, необходимыми для обслуживания индекса при обновлении основных данных. Подобно всем другим задачам по обслуживанию индексов, удаление индекса осуществляется через вкладку Indexes/Keys (Индексы/Ключи) диалогового окна Properties (Свойства) конструктора таблиц Table Designer.
    Удалите индекс
  • Если конструктор таблиц Table Designer для таблицы Oils не открыт, откройте его, щелкнув правой кнопкой мыши на имени таблицы в рабочей панели Details Pane, и выберите Design Table (Конструирование таблицы). SQL Server откроет конструктор таблиц Table Designer.
    Удаление индексов

  • Щелкните на кнопке Indexes/Keys (Индексы/Ключи).Удаление индексов SQL Server откроет диалоговое окно Properties (Свойства) для таблицы с отображением страницы свойств Indexes/Keys (Индексы/Ключи).
    Удаление индексов

  • Выберите IX_Name в поле списка Selected Index (Выбор индекса). SQL Server отобразит свойства для индекса.
    Удаление индексов

  • Нажмите Delete (Удалить). SQL Server удалит индекс.
  • Нажмите Close (Закрыть). SQL Server закроет диалоговое окно.
  • Щелкните на кнопке Save (Сохранить) в панели инструментов конструктора таблиц, чтобы сохранить изменения, а затем закройте окно конструктора таблиц Table Designer.



  • Изменение отношений


    Необходимость в изменении отношения возникает чрезвычайно редко, но иногда при изменении структуры одной из базовых таблиц приходится изменять и отношение. Вы можете изменить столбцы, участвующие в отношении, просто изменив спецификацию на странице Relationships (Отношения) диалогового окна Properties (Свойства) таблицы.
    Измените отношение
  • Откройте конструктор таблиц Table Designer для таблицы Oils, щелкнув правой кнопкой на имени таблицы в рабочей панели Details Pane и выбрав Design Table (Конструирование таблицы). SQL Server откроет конструктор таблиц Table Designer.
    Изменение отношений

  • Щелкните на кнопке Relationships (Отношения)Изменение отношений в панели инструментов конструктора таблиц. SQL Server откроет диалоговое окно Properties (Свойства) конструктора таблиц с отображением страницы свойств Relationships (Отношения).
    Изменение отношений

  • Проверьте, что в поле списка Selected Relationship (Выбор отношения) выбрано FK_Oils_PlantTypes. SQL Server отобразит свойства отношения.
  • Выберите PlantPartID в качестве поля внешнего ключа.
    Изменение отношений

  • Нажмите Close (Закрыть). SQL Server закроет диалоговое окно Properties (Свойства).
  • Щелкните на кнопке Save (Сохранить) в панели инструментов конструктора таблиц. SQL Server отобразит диалоговое окно, предлагающее подтвердить, что внесенные вами в две таблицы изменения следует сохранить в вашей базе данных.
    Изменение отношений

  • Нажмите Yes (Да). SQL Server изменит отношение.
  • Закройте окно конструктора таблиц Table Designer.



  • Обслуживание отношений


    Как вы можете предположить, отношения обслуживаются с использованием того же диалогового окна Properties (Свойства), с помощью которого они были созданы.
    Переименуйте отношение
  • Откройте конструктор таблиц Table Designer для таблицы Oils, щелкнув правой кнопкой на имени таблицы в рабочей панели Details Pane и выбрав Design Table (Конструирование таблицы). SQL Server откроет конструктор таблиц Table Designer.
    Обслуживание отношений

  • Щелкните на кнопке Relationships (Отношения).Обслуживание отношений SQL Server откроет диалоговое окно Properties (Свойства) конструктора таблиц с отображением страницы свойств Relationships (Отношения).
    Обслуживание отношений

  • Выберите FK_Oils_PlantTypes в списке Selected Relationship (Выбор отношения). SQL Server отобразит свойства отношения.
    Обслуживание отношений

  • Выделите текст в поле Relationship Name (Имя отношения) и введите DeleteMe.
    Обслуживание отношений

  • Нажмите Close (Закрыть). SQL Server закроет диалоговое окно Properties (Свойства)
  • Нажмите кнопку Save (Сохранить). SQL Server отобразит диалоговое окно, предлагающее подтвердить, что внесенные вами в две таблицы изменения следует сохранить в вашей базе данных.
    Обслуживание отношений

  • Нажмите Yes (Да). SQL Server изменит имя отношения.
  • Закройте окно конструктора таблиц Table Designer.



  • Создание отношений


    В SQL Server отношения создаются с помощью вкладки Relationships (Отношения) диалогового окна Properties (Свойства) конструктора таблиц Table Designer. Отношения один-к-одному и один-ко-многим создаются аналогичным образом. SQL Server определяет тип отношения на основе столбцов, содержащихся в зависимой таблице; если для столбцов внешнего ключа имеется уникальный индекс, отношение будет иметь тип один-к-одному; в противном случае оно будет иметь тип один-ко-многим.
    Создайте отношение
  • Откройте конструктор таблиц Table Designer для таблицы Oils, щелкнув правой кнопкой на имени таблицы в рабочей панели Details Pane и выбрав Design Table (Конструирование таблицы). SQL Server откроет конструктор таблиц Table Designer.
    Создание отношений

  • Щелкните на кнопке Relationships (Отношения)Создание отношений в панели инструментов Table Designer. SQL Server откроет диалоговое окно Properties (Свойства) конструктора таблиц с отображением страницы свойств Relationships (Отношения).
    Создание отношений

  • Нажмите New (Создать). SQL Server предложит первую таблицу в списке таблиц для установления нового отношения.
    Создание отношений

  • Выберите PlantTypes в качестве главной таблицы. SQL Server предложит FK_Oils_PlantTypes в качестве имени для отношения.
    Создание отношений

  • Выберите PlantTypeID в качестве поля первичного ключа.
    Создание отношений

  • Выберите PlantTypeID в качестве поля внешнего ключа.
    Создание отношений


  • Совет. Если вы хотите использовать для отношения каскадные изменения или удаления, установите соответствующие флажки на странице свойств.
  • Нажмите Close (Закрыть). SQL Server закроет диалоговое окно Properties (Свойства).
  • Щелкните на кнопке Save (Сохранить)Создание отношений в панели инструментов конструктора таблиц. SQL Server отобразит диалоговое окно, предлагающее подтвердить, что изменения, внесенные вами в две таблицы, следует сохранить в вашей базе данных.
    Создание отношений

  • Нажмите Yes (Да). SQL Server создаст отношение.
  • Закройте окно конструктора таблиц Table Designer.



  • Возвратные отношения


    Большинство отношений в базе данных устанавливают между двумя различными таблицами. Однако бывает, когда таблица связывается сама с собой либо через отношение один-к-одному, либо через отношение один-ко-многим. Подобные отношения называются возвратными отношениями.
    Возвратные отношения чаще всего применяются для реализации иерархий. Типичный пример – иерархия сотрудников в организации. Сотрудник может быть подчинен менеджеру, а менеджер, в свою очередь, может как сотрудник иметь вышестоящего менеджера. Это отношение оформляется путем включения первичного ключа таблицы сотрудников в качестве столбца таблицы и установки возвратного отношения один-ко-многим.
    Возвратные отношения

    На уровне таблицы отношение оформляется путем включения уникального идентификатора, обычно первичного ключа, из таблицы на стороне одного (главную таблицу, или таблицу первичного ключа) в таблицу на стороне многих (зависимую таблицу, или таблицу внешнего ключа). Этот идентификатор называется внешним ключом.
    Примечание. Уникальный идентификатор, который используется в качестве внешнего ключа, обычно является первичным ключом главной таблицы, однако он также может быть любым столбцом или группой столбцов, которые были объявлены уникальными.
    SQL Server может контролировать отношения, которые вы установили в базе данных, осуществляя обслуживание целостности отношений. По умолчанию SQL Server будет отвергать любые изменения в первичном ключе строки из главной таблицы, которая имеет связанные строки в зависимой таблице.
    Новинкой в Microsoft SQL Server 2000 является возможность каскадных изменений в главной таблице. Если вы укажете SQL Server осуществлять каскадные удаления для отношения, удаление строки в главной таблице заставит SQL Server удалить все связанные строки в зависимой таблице. Аналогично, если вы укажете SQL Server каскадировать обновления, изменение первичного ключа главной таблицы будет приводить к обновлению связанных столбцов в зависимой таблице.
    Внимание! Некоторые схемы баз данных могут быть достаточно сложными. Использование каскадных удалений и изменений может облегчить сопровождение сложных структур данных, но SQL Server требует, чтобы каскадирование не было круговым. Например, удаление строки в таблице А может привести к удалению строки в таблице В, что, в свою очередь, вызовет удаление строки в таблице С. Однако не допускается устанавливать такой режим каскадирования, при котором удаление строки в таблице С приведет к удалению строки в таблице А.


    Изменение проверочных ограничений


    Конструктор таблиц Table Designer предоставляет механизм для корректировки текста проверочного ограничения через то же диалоговое окно Properties (Свойства), которое вы использовали при его создании.
    Измените текст ограничения
  • Если вы закрыли конструктор таблиц Table Designer после выполнения предыдущего упражнения, откройте его, щелкнув правой кнопкой мыши на имени таблицы в рабочей панели Details Pane и выбрав Design Table (Конструирование таблицы). SQL Server откроет конструктор таблиц Table Designer.
    Изменение проверочных ограничений

  • Нажмите кнопку Constraints (Ограничения).Изменение проверочных ограничений SQL Server откроет диалоговое окно Properties (Свойства) конструктора таблиц с отображением страницы свойств Check Constraints (Проверочные ограничения).
    Изменение проверочных ограничений

  • Убедитесь, что ограничение CK_Oils отображено в поле списка Selected Constraint (Выбранное ограничение).
  • Измените текст ограничения на LEN(OilName) > 2, чтобы задать новое условие ограничения.
    Изменение проверочных ограничений

  • Нажмите Close (Закрыть). SQL Server закроет диалоговое окно Properties (Свойства) конструктора таблиц.
  • Нажмите Save (Сохранить). SQL Server проверит все строки в таблице на соответствие новому проверочному ограничению, а затем сохранит ограничение.



  • Обслуживание проверочных ограничений


    Как и другие свойства таблицы, проверочные ограничения обслуживаются через диалоговое окно Properties (Свойства) конструктора таблиц.
    Переименуйте проверочное ограничение
  • Откройте конструктор таблиц Table Designer для таблицы Oils, щелкнув правой кнопкой мыши на имени таблицы в рабочей панели Details Pane и выбрав Design Table (Конструирование таблицы). SQL Server откроет конструктор таблиц Table Designer.
    Обслуживание проверочных ограничений

  • Нажмите кнопку Constraints (Ограничения).Обслуживание проверочных ограничений SQL Server откроет диалоговое окно Properties (Свойства) конструктора таблиц с отображением страницы свойств Check Constraints (Проверочные ограничения).
    Обслуживание проверочных ограничений

  • Выделите CK_Oils в поле имени ограничения Constraint Name и измените его на CK_DeleteMe.
    Обслуживание проверочных ограничений

  • Нажмите кнопку Close (Закрыть). SQL Server закроет диалоговое окно Properties (Свойства).
  • Нажмите кнопку Save (Сохранить). SQL Server проверит все строки в таблице на соответствие проверочному ограничению и сохранит ограничение.



  • Создание проверочных ограничений


    Подобно индексам и отношениям, вы можете создавать проверочные ограничения с помощью диалогового окна Properties (Свойства) конструктора таблиц Table Designer.
    Создайте проверочное ограничение
  • Откройте конструктор таблиц Table Designer для таблицы Oils, щелкнув правой кнопкой мыши на имени таблицы в рабочей панели Details Pane и выбрав Design Table (Конструирование таблицы). SQL Server откроет конструктор таблиц Table Designer.
    Создание проверочных ограничений

  • Нажмите кнопку Constraints (Ограничения).Создание проверочных ограничений Microsoft SQL Server откроет диалоговое окно Properties (Свойства) конструктора таблиц, отобразив страницу свойств Check Constraints (Проверочные ограничения).
    Создание проверочных ограничений

  • Нажмите New (Создать). SQL Server предлагает в качестве имени ограничения CK_Oils. В этом упражнении мы примем это имя.
    Создание проверочных ограничений

  • Введите LEN(OilName) >= 4 в качестве условия ограничения.
    Создание проверочных ограничений


  • Совет. Если вы создаете новое проверочное ограничение и не хотите, чтобы оно применялось для уже существующих данных, вы можете указать SQL Server игнорировать существующие данные, сбросив флажок Check Existing Data On Creation (Проверять при создании существующие данные) для ограничения.
  • Нажмите Close (Закрыть). SQL Server закроет диалоговое окно Properties (Свойства) конструктора таблиц.
  • Нажмите кнопку Save (Сохранить).Создание проверочных ограничений SQL Server проверит, отвечают ли все строки в таблице проверочному ограничению, а затем сохранит ограничение.



  • Снимите действие умолчания


    Снимите действие умолчания
  • Если конструктор таблиц Table Designer не остался открытым после выполнения предыдущего упражнения, откройте его, щелкнув правой кнопкой мыши на имени таблицы в рабочей панели Details Pane и выбрав Design Table (Конструирование таблицы). SQL Server откроет конструктор таблиц.
    Снимите действие умолчания

  • Выделите столбец Sample. Конструктор таблиц отобразит свойства для этого столбца.
    Снимите действие умолчания

  • Выделите dbo.DefaultUnknown в поле значения по умолчанию Default Value и нажмите клавишу Delete, чтобы удалить значение.
    Снимите действие умолчания

  • Нажмите кнопку Save (Сохранить). SQL Server сохранит изменение в определении столбца.



  • Создание пользовательских типов данных


    Опять-таки, пользовательские типы данных представляют собой независимые объекты базы данных и должны быть определены в базе данных до того, как они могут быть назначены столбцам.
    Создайте пользовательский тип данных
  • Перейдите к папке User Defined Data Types базы данных Aromatherapy. SQL Server отобразит список пользовательских типов данных. (В рассматриваемом нами примере базы данных он будет пуст.)
    Создание пользовательских типов данных
    увеличить изображение

  • Нажмите New (Создать) Создание пользовательских типов данных. SQL Server отобразит диалоговое окно User-Defined Data Type Properties (Свойства пользовательских типов данных).
    Создание пользовательских типов данных

  • Введите MySample в качестве имени пользовательского типа данных.
    Создание пользовательских типов данных

  • Установите в качестве базового тип данных varchar и длину, равную 20.
    Создание пользовательских типов данных

  • Выберите dbo.SampleRule в поле списка Rule (Правило).
    Создание пользовательских типов данных

  • Примите значения по умолчанию для опций Allow NULLS и Default, затем нажмите ОК. SQL Server создаст пользовательский тип данных.



  • Создание правил


    Поскольку правила, как и умолчания, представляют собой независимые объекты базы данных, вы должны создать их, прежде чем сможете их применить к столбцу в таблице.
    Создайте правило
  • Перейдите к папке Rules базы данных Aromatherapy в дереве консоли Console Tree. SQL Server отобразит список правил для базы данных. (Для рассматриваемой в примере базы данных список будет пуст.)
    Создание правил
    увеличить изображение

  • Нажмите New (Создать).Создание правил SQL Server откроет диалоговое окно Rule Properties (Свойства правила).
    Создание правил

  • Введите SampleRule в качестве имени правила.
    Создание правил

  • Введите LEN(@fldValue) > 3 в качестве текста правила.
    Создание правил


  • Совет. Помните, что LEN является функцией Transact-SQL, которая возвращает количество символов в текстовой строке, и что символ @ в начале оператора Transact-SQL указывает на переменную, которая будет передавать значение в операторе. Поэтому в этом случае правило возвратит TRUE только тогда, когда длина столбца больше, чем 3.
  • Нажмите ОК. SQL Server закроет диалоговое окно Rule Properties (Свойства правила) и создаст правило.



  • Создание умолчаний


    Поскольку умолчания являются независимыми объектами в пределах базы данных, вы должны создать умолчание, прежде чем сможете связать его со столбцом таблицы.
    Создайте умолчание
  • Перейдите к папке Default базы данных Aromatherapy в дереве консоли Console Tree. SQL Server отобразит список умолчаний в рабочей панели Details Pane. (В рассматриваемом нами примере базы данных их нет.)
    Создание умолчаний
    увеличить изображение

  • Нажмите кнопку New (Создать).Создание умолчаний SQL Server отобразит диалоговое окно Default Properties (Свойства умолчаний).
    Создание умолчаний

  • Введите DefaultUnknown в поле имени Name.
    Создание умолчаний

  • Введите 'Неизвестно' в поле значения Value.
    Создание умолчаний

  • Нажмите ОК. SQL Server создаст умолчание.



  • Свяжите умолчание со столбцом


    Свяжите умолчание со столбцом
  • Перейдите к папке Tables и откройте конструктор таблиц Table Designer для таблицы Oils, щелкнув правой кнопкой мыши на имени таблицы в рабочей панели Details Pane и выбрав Design Table (Конструирование таблицы). SQL Server откроет конструктор таблиц.
    Свяжите умолчание со столбцом

  • Добавьте в таблицу новый столбец с именем Sample. Примите тип данных по умолчанию и длину, предложенную SQL Server.
    Свяжите умолчание со столбцом

  • Щелкните на поле значения по умолчанию Default Value для столбца, а затем выберите из списка dbo.DefaultUnknown.
    Свяжите умолчание со столбцом

  • Нажмите кнопку Save (Сохранить).Свяжите умолчание со столбцом SQL Server сохранит таблицу.



  • Изменение схемы базы данных


    Одним из наиболее полезных свойств в окне Database Diagram (Диаграмма базы данных) является возможность модифицировать схему базы данных непосредственно в диаграмме. Графическое представление является отличным средством для визуализации таблиц и отношений в вашей базе данных, а возможность непосредственно модифицировать схему позволяет легко вносить изменения.
    Добавьте столбец в таблицу в окне диаграммы Database Diagram
  • Увеличьте таблицу Oils в диаграмме базы данных, перетащив вниз правый нижний угол, пока не будет видна пустая строка в сетке таблицы.
    Изменение схемы базы данных

  • Щелкните на первой пустой ячейке в поле Column Name и добавьте новый столбец с именем Description. Установите для него тип данных varchar и длину, равную 50.
    Изменение схемы базы данных


  • Совет. Обратите внимание, что имя таблицы для таблицы Oils имеет в конце звездочку (*). SQL Server помечает подобным образом любую таблицу в окне Database Diagram (Диаграмма базы данных), которая была изменена, указывая тем самым, что изменения еще не сохранены.
    Поскольку SQL Server не изменяет схему базы данных до тех пор, пока вы не сохраните диаграмму, вы можете воспользоваться окном Database Diagram (Диаграмма базы данных), чтобы опробовать изменения, прежде чем принять их. Если вы передумаете, вам будет достаточно просто закрыть окно без сохранения изменений, и ваша база данных останется такой же, какой и была.
  • Щелкните на кнопке Arrange Tables (Упорядочить таблицы),Изменение схемы базы данных чтобы SQL Server изменил размеры отображаемой таблицы.
  • Нажмите кнопку Save (Сохранить). SQL Server отобразит диалоговое окно, предлагающее вам подтвердить изменения в таблице Oils.
    Изменение схемы базы данных

  • Нажмите Yes (Да). SQL Server обновит таблицу Oils добавлением нового столбца и удалит звездочку из отображения таблицы Oils в диаграмме.



  • Создание диаграммы базы данных из существующей схемы


    Хотя возможно создать всю схему базы данных из окна Database Diagram (Диаграмма базы данных), чаще всего диаграммы создают из существующих таблиц. С помощью мастера создания диаграмм Create Database Diagram Wizard этот процесс можно упростить – достаточно выбрать таблицы, которые вы хотите включить в диаграмму, и мастер Create Database Diagram Wizard сделает все остальное.
    После того, как вы создали диаграмму базы данных с помощью мастера Create Database Diagram Wizard, вы можете добавлять и удалять таблицы и изменять количество отображаемых элементов для каждой таблицы.
    Создайте диаграмму базы данных
  • Перейдите к папке Diagrams базы данных Aromatherapy. Microsoft SQL Server отобразит имеющиеся диаграммы в рабочей панели Details Pane.
    Создание диаграммы базы данных из существующей схемы
    увеличить изображение

  • Нажмите New (Создать). Создание диаграммы базы данных из существующей схемыSQL Server отобразит первую страницу мастера создания диаграмм Create Database Diagram Wizard.
    Создание диаграммы базы данных из существующей схемы

  • Нажмите Next (Далее). Мастер создания диаграмм отобразит страницу, предлагающую вам выбрать таблицы, включаемые в диаграмму базы данных.
    Создание диаграммы базы данных из существующей схемы

  • Щелкните на поле флажка Add Related Tables Automatically (Автоматически добавлять связанные таблицы) и установите уровень отношений, равный 2.
    Создание диаграммы базы данных из существующей схемы

  • Выделите Oils в списке Available Tables (Доступные таблицы), а затем нажмите Add (Добавить). Мастер создания диаграмм Create Database Diagram Wizard добавит таблицу Oils и все связанные с ней таблицы в список таблиц, которые будут добавлены в диаграмму.
    Создание диаграммы базы данных из существующей схемы

  • Нажмите Next (Далее). Мастер создания диаграмм Create Database Diagram Wizard отобразит страницу, предлагающую вам подтвердить список таблиц, добавляемый в диаграмму базы данных.
    Создание диаграммы базы данных из существующей схемы

  • Нажмите Finish (Готово). Мастер создания диаграмм Create Database Diagram Wizard создаст диаграмму.
    Создание диаграммы базы данных из существующей схемы
    увеличить изображение


  • Совет. Когда SQL Server создает диаграмму базы данных, он соединяет таблицы линиями, указывающими на связи между ними. Вы можете реорганизовать эти линии связей путем перетаскивания их мышью. Так, у вас может возникнуть желание реорганизовать линии таким образом, чтобы они указывали на столбцы, участвующие в отношениях, либо сделать диаграмму более понятной для восприятия.
  • Нажмите кнопку Save (Сохранить). Создание диаграммы базы данных из существующей схемы SQL Server отобразит диалоговое окно, запрашивающее имя для диаграммы.
    Создание диаграммы базы данных из существующей схемы

  • Введите урок 10 в качестве имени и нажмите ОК. SQL Server сохранит диаграмму.


  • Создание диаграммы базы данных из существующей схемы

  • Введите урок 10 в качестве имени и нажмите ОК. SQL Server сохранит диаграмму.


  • Измените степень детализации диаграммы базы данных

  • Выделите таблицу Oils в диаграмме базы данных, щелкнув мышью на ее имени в диаграмме.

    Создание диаграммы базы данных из существующей схемы
    увеличить изображение

  • Выберите Standard (Стандартный) из открывающегося списка, который отображается, когда вы нажимаете кнопку Show (Вид)Создание диаграммы базы данных из существующей схемы в панели инструментов окна Database Diagram (Диаграмма базы данных). SQL Server добавит тип данных, длину и возможность использования нулевых значений (NULL) к отображению таблицы Oils.

    Создание диаграммы базы данных из существующей схемы
    увеличить изображение



  • Совет. Вы можете изменить способ отображения для нескольких таблиц в диаграмме, выделив их (с помощью клавиши Ctrl) до нажатия кнопки Show (Вид) на панели инструментов.

  • Нажмите кнопку Arrange Tables (Упорядочить таблицы)Создание диаграммы базы данных из существующей схемы в панели инструментов Database Diagram (Диаграмма базы данных). SQL Server реорганизует диаграмму базы данных, чтобы учесть дополнительное пространство, требующееся для таблицы Oils.

    Создание диаграммы базы данных из существующей схемы
    увеличить изображение

  • Нажмите кнопку Save (Сохранить).Создание диаграммы базы данных из существующей схемы SQL Server сохранит новое размещение элементов диаграммы.


  • Добавьте имеющуюся таблицу в диаграмму базы данных

  • Щелкните на кнопке Add Table (Добавить таблицу)Создание диаграммы базы данных из существующей схемы в диаграмме базы данных. SQL Server отобразит диалоговое окно Add Table (Добавление таблицы).

    Создание диаграммы базы данных из существующей схемы

  • Выберите в списке таблицу с именем dtproperties, а затем щелкните на Add (Добавить). SQL Server добавит таблицу в диаграмму. Поскольку таблица dtproperties является системной таблицей, которая не связана с таблицами данных из базы Aromatherapy, SQL Server не добавит в диаграмму никаких линий связи.

    Создание диаграммы базы данных из существующей схемы
    увеличить изображение

  • Нажмите кнопку Close (Закрыть), чтобы закрыть диалоговое окно Add Table (Добавление таблицы), а затем нажмите кнопку Save (Сохранить)Создание диаграммы базы данных из существующей схемы в панели инструментов database Diagram. SQL Server сохранит диаграмму с новой таблицей.


  • Удалите таблицу из диаграммы базы данных

  • Щелкните правой кнопкой мыши на таблице dtproperties в диаграмме базы данных и выберите Remove Table From Diagram (Удалить таблицу из диаграммы) из контекстного меню. SQL Server удалит таблицу из диаграммы.

    Создание диаграммы базы данных из существующей схемы
    увеличить изображение

  • Нажмите кнопку Save (Сохранить).Создание диаграммы базы данных из существующей схемы SQL Server сохранит диаграмму.



  • Создание объектов базы данных


    Кроме изменения имеющихся объектов базы данных, окно Database Diagram (Диаграмма базы данных) позволяет добавлять новые таблицы и создавать отношения.
    Создайте таблицу в окне диаграммы Database Diagram
  • Щелкните правой кнопкой мыши на пустой области в окне Database Diagram (Диаграмма базы данных) и выберите New Table (Новая таблица) из контекстного меню. SQL Server отобразит диалоговое окно, запрашивающее имя для новой таблицы.
    Создание объектов базы данных


  • Совет. Вы также можете создать новую таблицу, щелкнув на кнопке New Table (Новая таблица)Создание объектов базы данных в панели инструментов Database Diagram (Диаграмма базы данных).
  • Введите Images в качестве нового имени, а затем нажмите ОК. SQL Server добавит таблицу в диаграмму.
    Создание объектов базы данных
    увеличить изображение

  • Добавьте два столбца в новую таблицу: Имя столбцаТип данныхДлинаРазрешить NULL
    OilIDInt4No
    PictureImage16No

    Создание объектов базы данных

  • Выделите столбец OilID, щелкнув на сером прямоугольнике слева от имени столбца, а затем нажмите кнопку Primary Key (Первичный ключ)Создание объектов базы данных в панели инструментов окна Database Diagram (Диаграмма базы данных). SQL Server установит OilID в качестве первичного ключа таблицы.
    Создание объектов базы данных

  • Щелкните правой кнопкой мыши на таблице, откройте меню Table View (Представление таблицы) и выберите Column Names (Имена столбца). SQL Server изменит способ отображения таблицы.
    Создание объектов базы данных

  • Нажмите кнопку Save (Сохранить).Создание объектов базы данных SQL Server отобразит диалоговое окно, предлагающее вам подтвердить изменения в схеме базы данных.
    Создание объектов базы данных

  • Нажмите Yes (Да). SQL Server добавит новую таблицу в базу данных.



  • Модификация строк в таблице


    Конструктор запросов можно использовать также для изменения значений в имеющихся строках таблицы, либо для добавления новых строк.
    Отредактируйте строку в конструкторе запросов Query Designer
  • Щелкните правой кнопкой мыши на таблице PlantParts в рабочей панели Details Pane, откройте меню Open Table (Открытие таблицы), а затем выберите Return All Rows (Показать все строки), чтобы открыть конструктор запросов Query Designer для таблицы PlantParts.
  • Измените столбец таблицы PlantParts для строки со значением PlantPartID, равным 12, заменив Fruit Kernal на Fruit Kernel. Конструктор запросов добавит значок Edit (Правка)Модификация строк в таблице к селектору строки, который указывает, что запись отредактирована, но изменения еще не сохранены.
    Модификация строк в таблице
    увеличить изображение

  • Щелкните на любой другой строке. Конструктор запросов сохранит изменение и удалит значок правки Edit.
    Модификация строк в таблице
    увеличить изображение


  • Совет. Прежде чем переместиться к другой строке, вы можете нажать клавишу Esc, чтобы отменить ваши изменения.
    Добавьте новую строку в конструкторе запросов Query Designer
  • В конструкторе запросов Query Designer щелкните на столбце PlantPart в последней строке [отмеченной значком New (Новая)Модификация строк в таблице].
  • Введите Fruit. Конструктор запросов пометит строку значком Edit (Правка)Модификация строк в таблице и добавит новую строку в конце таблицы.
    Модификация строк в таблице
    увеличить изображение

  • Щелкните на любой другой строке в таблице. Конструктор запросов присвоит значение PlantPartID новой строке и сохранит ее в таблице.
    Модификация строк в таблице
    увеличить изображение


  • Примечание. Вы не можете добавить значение PlantPartID для новой строки, поскольку этот столбец является идентификационным столбцом. Если вы попытаетесь сделать это, конструктор запросов Query Designer отобразит сообщение об ошибке.


    Просмотр строк в таблице


    Простейшим способом просмотра строк в таблице является открытие конструктора запросов Query Designer через контекстное меню таблицы.
    Просмотрите все строки в таблице
  • В Enterprise Manager перейдите к папке Table базы данных Aromatherapy. SQL Server отобразит список таблиц в рабочей панели Details Pane.
    Просмотр строк в таблице
    увеличить изображение

  • Щелкните правой кнопкой мыши на таблице PlantParts, откройте меню Open Table (Открытие таблицы) и выберите Return All Rows (Показать все строки). SQL Server откроет конструктор запросов Query Designer с отображением всех строк в таблице.
    Просмотр строк в таблице
    увеличить изображение


  • Ограничьте количество отображаемых строк
  • Закройте конструктор запросов Query Designer.
  • Щелкните правой кнопкой мыши на таблице Odors в рабочей панели Details Pane, откройте меню Open Table (Открытие таблицы) и выберите Return Top (Показать первые). SQL Server отобразит диалоговое окно, запрашивающее, сколько строк вы хотите извлечь.
    Просмотр строк в таблице

  • Введите 5 в качестве максимального количества извлекаемых строк.
    Просмотр строк в таблице

  • Нажмите ОК. Конструктор запросов Query Designer отобразит первые пять строк в таблице.
    Просмотр строк в таблице
    увеличить изображение

  • Закройте окно конструктора запросов Query Designer.



  • Использование фразы TOP n


    Когда вы выбираете команду Return Top (Показать первые) из контекстного меню таблицы, SQL Server использует фразу TOP n, чтобы создать отображение в конструкторе запросов Query Designer. Помимо задания определенного количества строк, вы также можете отобразить часть строк в процентах от общего их количества, воспользовавшись фразой TOP n PERCENT, которая, как можно ожидать, возвращает указанный процент строк.
    Отобразите первые 5 строк
  • Добавьте фразу TOP 5 перед первым словом в списке_столбцов оператора SELECT в панели SQL Pane.
    Использование фразы TOP n
    увеличить изображение

  • Нажмите кнопку Run (Выполнить)Использование фразы TOP n в панели инструментов конструктора запросов, чтобы повторно исполнить запрос. SQL Server отобразит только первые пять строк.
    Использование фразы TOP n
    увеличить изображение


  • Отобразите первые 5 процентов строк
  • Добавьте слово PERCENT после TOP 5 в панели SQL Pane.
    Использование фразы TOP n
    увеличить изображение

  • Нажмите кнопку Run (Выполнить)Использование фразы TOP n в панели инструментов конструктора запросов, чтобы исполнить запрос. SQL Server отобразит только первые пять процентов строк.
    Использование фразы TOP n
    увеличить изображение




  • Создайте вычисляемый столбец с использованием панели SQL Pane


    Создайте вычисляемый столбец с использованием панели SQL Pane
  • Скройте панель сетки Grid PaneСоздайте вычисляемый столбец с использованием панели SQL Pane и отобразите панель SQL PaneСоздайте вычисляемый столбец с использованием панели SQL Pane, щелкнув на кнопках в панели инструментов конструктора запросов.
    Создайте вычисляемый столбец с использованием панели SQL Pane
    увеличить изображение

  • Добавьте GETDATE() AS [Today's Date] в список столбцов оператора SELECT.
    Создайте вычисляемый столбец с использованием панели SQL Pane
    увеличить изображение


  • Совет. Не забудьте поставить запятую перед GETDATE!
  • Нажмите кнопку Run (Выполнить)Создайте вычисляемый столбец с использованием панели SQL Pane в панели инструментов конструктора запросов, чтобы повторно исполнить запрос. SQL Server отобразит текущие данные в каждой из строк.
    Создайте вычисляемый столбец с использованием панели SQL Pane
    увеличить изображение




  • Создание псевдонимов столбцов


    По умолчанию столбец в запросе носит то же имя, которое он имел в исходной таблице или строке. Однако полезно иметь возможность изменять имя, либо по причине слишком большой его длины ("MyLongColumnNameWithNoSpaces"), либо просто потому, что оно слишком непривычно для его отображения пользователю ("pk_varchar_50_col32713"). Оператор SELECT позволяет переименовывать столбцы в запросе путем создания псевдонимов. Псевдоним изменяет имя столбца в запросе, но не в таблице.
    Создайте псевдоним столбца с использованием панели сетки Grid Pane
  • Скройте панель диаграмм Diagram PaneСоздание псевдонимов столбцов и отобразите панель Grid PaneСоздание псевдонимов столбцов, щелкнув на кнопках в панели инструментов конструктора запросов.
    Создание псевдонимов столбцов
    увеличить изображение

  • Создайте псевдоним для столбца OilName, введя OilName в поле Alias (Псевдоним). Конструктор запросов автоматически добавит квадратные скобки вокруг псевдонима, поскольку псевдоним содержит пробел.
    Создание псевдонимов столбцов
    увеличить изображение


  • Примечание. Квадратные скобки не будут отображаться в результате выполнения запроса. Они просто указывают SQL Server интерпретировать текст "Oil Name" как одно имя. Квадратные скобки обязательны только в том случае, если псевдоним содержит пробел, но они могут использоваться для любого имени столбца.
  • Нажмите кнопку Run (Выполнить)Создание псевдонимов столбцов в панели инструментов конструктора запросов, чтобы повторно исполнить запрос. SQL Server отобразит имя в заголовке столбца с пробелом между словами.
    Создание псевдонимов столбцов
    увеличить изображение


  • Создайте псевдоним столбца с использованием панели SQL Pane
  • Скройте панель сетки Grid PaneСоздание псевдонимов столбцов и отобразите панель SQL PaneСоздание псевдонимов столбцов, щелкнув на кнопках в панели инструментов конструктора запросов Query Designer.
    Создание псевдонимов столбцов
    увеличить изображение

  • Добавьте [Latin Name] в качестве псевдонима для второго столбца.
    Создание псевдонимов столбцов
    увеличить изображение

  • Нажмите кнопку Run (Выполнить)Создание псевдонимов столбцов в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов отобразит имя в заголовке столбца с пробелом между двумя словами.
    Создание псевдонимов столбцов
    увеличить изображение




  • Создание вычисляемых столбцов


    В дополнение к столбцам, которые просто отображают информацию из исходных таблиц и представлений, ваш запрос может также содержать столбцы, которые вычисляются на основе исходных данных, функций SQL Server или любой их комбинации. Вычисляемый столбец создается путем задания выражения в качестве столбца. Подробнее с выражениями Transact-SQL мы познакомимся в уроке 21, поэтому в этом упражнении мы лишь используем пару простых выражений на основе оператора + конкатенации строк, который складывает две строки, а также функции GETDATE, возвращающей текущие системные дату и время.
    Создайте вычисляемый столбец с использованием панели сетки Grid Pane
  • Скройте панель SQL PaneСоздание вычисляемых столбцов и отобразите панель сетки Grid Pane,Создание вычисляемых столбцов щелкнув на кнопках в панели инструментов конструктора запросов.
    Создание вычисляемых столбцов
    увеличить изображение

  • Щелкните на пустой ячейке столбца в панели сетки Grid Pane и введите OilName + ' - ' + LatinName.
    Создание вычисляемых столбцов
    увеличить изображение


  • Совет. Вы можете сделать ячейки в панели сетки Grid Pane шире, перетащив разделительные линии между заголовками столбцов.
  • Нажмите клавишу Tab. SQL Server предложит в качестве псевдонима столбца Expr1.
    Создание вычисляемых столбцов
    увеличить изображение

  • Измените псевдоним на Extended Name.
    Создание вычисляемых столбцов
    увеличить изображение

  • Нажмите кнопку Run (Выполнить)Создание вычисляемых столбцов, чтобы повторно исполнить запрос. Конструктор запросов отобразит новый столбец в панели результатов Results Pane.
    Создание вычисляемых столбцов
    увеличить изображение




  • Выборка подмножества столбцов


    Хотя синтаксис SELECT * чрезвычайно прост в использовании, вам часто требуется, чтобы ваш запрос возвращал только избранные столбцы. Для этого следует указать столбцы в перечне список_столбцов оператора SELECT.
    Выполните отбор столбцов с использованием панели SQL Pane
  • Замените * в операторе SELECT на имя столбца OilName.
    Выборка подмножества столбцов
    увеличить изображение

  • Нажмите кнопку Run (Выполнить)Выборка подмножества столбцов в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов отобразит только столбец OilName.
    Выборка подмножества столбцов
    увеличить изображение


  • Выполните отбор столбцов с помощью панели диаграмм Diagram Pane
  • Скройте панель SQL PaneВыборка подмножества столбцов и отобразите панель диаграмм Diagram PaneВыборка подмножества столбцов, щелкнув на кнопках в панели инструментов конструктора запросов.
    Выборка подмножества столбцов
    увеличить изображение

  • Щелкните на поле LatinName в панели диаграмм Diagram Pane. Конструктор запросов сделает панель результатов Results тусклой, указывая на то, что результаты больше не являются корректными.
    Выборка подмножества столбцов
    увеличить изображение

  • Нажмите кнопку Run (Выполнить)Выборка подмножества столбцов, чтобы исполнить запрос. Конструктор запросов отобразит в панели результатов Results Pane как столбец OilName, так и столбец LatinName.
    Выборка подмножества столбцов
    увеличить изображение




  • Выборка всех столбцов


    Простейшим случаем использования оператора SELECT является выборка всех столбцов из одной таблицы. Как большинство версий языка SQL, Transact-SQL позволяет вам использовать знак звездочки (*), если вы хотите задать все столбцы, поэтому в этом простом случае оператор будет иметь следующую форму:
    SELECT * FROM имя_таблицы
    Выберите все столбцы
  • Откройте конструктор запросов Query Designer для таблицы Properties, щелкнув правой кнопкой мыши на ее имени в рабочей панели Details Pane Enterprise Manager, открыв меню Open Table (Открытие таблицы) и выбрав Return All Rows (Показать все строки). SQL Server откроет конструктор запросов Query Designer для таблицы.
    Выборка всех столбцов
    увеличить изображение

  • Включите панель SQL Pane, щелкнув на кнопке SQL Pane (Панель SQL)Выборка всех столбцов в панели инструментов конструктора запросов. Конструктор запросов отобразит панель SQL Pane.
    Выборка всех столбцов
    увеличить изображение

  • Измените оператор SQL, чтобы отобразить все столбцы из таблицы Oils.
    Выборка всех столбцов
    увеличить изображение

  • Нажмите кнопку Run (Выполнить)Выборка всех столбцов в панели инструментов конструктора запросов, чтобы выполнить запрос. Конструктор запросов отобразит все записи из таблицы Oils.
    Выборка всех столбцов
    увеличить изображение


  • Совет. Вы можете отобразить большее количество строк в панели результатов Results Pane, перетащив разделительную линию между двумя панелями.


    Базовая фраза WHERE


    Основу фразы WHERE составляет условие выбора, которое определяет, какие строки будут возвращены. Базовая структура фразы WHERE имеет форму WHERE <столбец> <оператор> < значение>. SQL Server предоставляет полный объем операторов сравнения, показанных в таблице 13-1.

    Таблица 13-1. Операторы сравненияОператорЗначение
    =Равно
    >Больше чем
    <Меньше чем
    >=Больше или равно
    <=Меньше или равно
    <>Не равно

    При этом <значение>, указанное в условии WHERE, может быть константой, такой как "Red" или 10000, либо выражением, возвращающим значение, таким как GETDATE. Аналогично, значение <столбец> может быть получено с помощью функций Transact-SQL, такой как LEFT, которые возвращают указанное число символов, отсчитываемое от начала строки. Мы подробно рассмотрим функции в уроке 24, "Компоненты языка Transact-SQL".
    Задайте условие WHERE с использованием панели сетки Grid Pane
  • Выберите окно номер 2 из меню Windows, чтобы вернуться в окно конструктора Query Designer, используемое нами ранее в этом уроке.
  • Скройте панель SQL PaneБазовая фраза WHERE и отобразите панель сетки Grid PaneБазовая фраза WHERE, щелкнув на кнопках в панели инструментов конструктора запросов.
  • Введите = 'Eucalyptus' в ячейку условия Criteria строки OilName в панели сетки Grid Pane.
    Базовая фраза WHERE
    увеличить изображение

  • Нажмите кнопку Run (Выполнить)Базовая фраза WHERE в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит только одну строку.
    Базовая фраза WHERE
    увеличить изображение




  • Использование специальных операторов


    В дополнение к стандартному формату фразы WHERE <столбец> <оператор> <значение> SQL Server также поддерживает три специальных оператора: LIKE, который позволяет вам указывать значения с использованием символов замещения, представленных в таблице 13-2; BETWEEN, который позволяет вам задавать диапазон значений; и IN, который позволяет вам задавать множество, в котором содержатся значения.

    Таблица 13-2. Символы замещения.Символ замещенияЗначениеПример
    -Любой одиночный символLIKE 'a_' Соответствует "at" и "as", но не "and"
    %Любая строка из нуля или более символовLIKE '%t%' Соответствует "at", "bat" и "together", но не "lucky"
    []Любой определенный символ внутри области или множестваLIKE '[a-c]at' Соответствует "cat" и "bat", но не "fat" LIKE '[ab]at' Соответствует "bat", но не "cat"
    [^]Любой определенный символ, не содержащийся в области или множествеLIKE '[^c]at' Соответствует "bat" и "fat", но не "cat"

    Задайте условие WHERE с использованием оператора LIKE
  • Измените условие WHERE в панели SQL Pane на WHERE (OilName LIKE 'Rose%').
    Использование специальных операторов
    увеличить изображение

  • Нажмите кнопку Run (Выполнить)Использование специальных операторов в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит все строки, начинающиеся с "Rose".
    Использование специальных операторов
    увеличить изображение


  • Задайте условие WHERE с использованием оператора BETWEEN
  • Измените условие WHERE в панели SQL Pane на WHERE (LEFT(OilName,1) BETWEEN 'A' AND 'C').
    Использование специальных операторов
    увеличить изображение

  • Нажмите кнопку Run (Выполнить)Использование специальных операторов в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит все строки, начинающиеся с A, B или C.
    Использование специальных операторов
    увеличить изображение


  • Примечание. Transact-SQL также поддерживает оператор NOT BETWEEN, который работает точно так же, но исключает диапазон значений. Например, LEFT(OilName,1) NOT BETWEEN 'C' AND 'E' будет возвращать все строки, кроме тех, для которых значение OilName начинается с C, D или E.


    Отсортируйте строки с использованием панели SQL Pane


    Отсортируйте строки с использованием панели SQL Pane
  • Скройте панель сетки Grid PaneОтсортируйте строки с использованием панели SQL Pane и отобразите панель SQL PaneОтсортируйте строки с использованием панели SQL Pane, щелкнув на кнопках в панели инструментов конструктора запросов.

    Отсортируйте строки с использованием панели SQL Pane
  • Скройте панель сетки Grid PaneОтсортируйте строки с использованием панели SQL Pane и отобразите панель SQL PaneОтсортируйте строки с использованием панели SQL Pane, щелкнув на кнопках в панели инструментов конструктора запросов.
    Отсортируйте строки с использованием панели SQL Pane
    увеличить изображение

  • Поменяйте местами имена столбцов во фразе ORDER BY.
    Отсортируйте строки с использованием панели SQL Pane
    увеличить изображение

  • Нажмите кнопку Run (Выполнить)Отсортируйте строки с использованием панели SQL Pane в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит результаты, отсортированные сначала по полю OdorID, а затем по полю OilID.
    Отсортируйте строки с использованием панели SQL Pane
    увеличить изображение

  • Закройте окно конструктора запросов.



  • Сортировка по нескольким столбцам


    Вы можете указывать в фразе ORDER BY несколько столбцов. Если указано несколько столбцов, порядок их следования определяет результат – SQL Server будет сортировать строки по первому столбцу, затем по второму столбцу и т.д.
    Совет. Упражнения в этом разделе используют таблицу OilOdors, которая действует как узловая таблица, устанавливающая отношение много-ко-многим между таблицами Oils и Odors. Обычно вам следует использовать внешние ключи, содержащиеся в этой таблице, с помощью связывания. Как это делается, мы рассмотрим в следующем уроке, "Связывание таблиц".
    Отсортируйте строки с использованием панели сетки Grid Pane
  • Выберите окно номер 1 из меню Windows, чтобы вернуться в дерево консоли Console Tree.
  • Откройте конструктор запросов Query designer для таблицы OilOdors, щелкнув правой кнопкой мыши на ее имени в рабочей панели Details Pane, открыв меню Open Table (Открытие таблицы) и выбрав Return All Rows (Показать все строки). SQL Server откроет конструктор запросов Query designer для таблицы.
  • Отобразите панель сетки Grid Pane, щелкнув на кнопке Grid Pane (Панель сетки)Сортировка по нескольким столбцам в панели инструментов конструктора запросов.
    Сортировка по нескольким столбцам
    увеличить изображение

  • Замените * в панели сетки Grid Pane на имена двух полей. SQL Server выделит содержимое панели результатов Results Pane тусклым, указывая, что оно больше не отвечает спецификации запроса.
    Сортировка по нескольким столбцам
    увеличить изображение

  • Нажмите кнопку Run (Выполнить)Сортировка по нескольким столбцам в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит только два указанных вами столбца.
    Сортировка по нескольким столбцам
    увеличить изображение

  • Установите значение типа сортировки Sort Type для обоих столбцов на Ascending (По возрастанию).
    Сортировка по нескольким столбцам
    увеличить изображение

  • Нажмите кнопку Run (Выполнить)Сортировка по нескольким столбцам в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит строки, отсортированные сначала по полю OilID, а затем по полю OdorID в соответствии со значениями номеров OilID.
    Сортировка по нескольким столбцам
    увеличить изображение




  • Сортировка строк


    Простейшая форма фразы ORDER BY предоставляет имя одного столбца, который будет использоваться для сортировки строк, возвращенных запросом.
    Отсортируйте строки с использованием панели сетки Grid Pane.
  • Откройте конструктор запросов Query Designer для таблицы Oils, щелкнув правой кнопкой мыши на ее имени в рабочей панели Details Pane, открыв меню Open Table (Открытие таблицы) и выбрав Return All Rows (Показать все строки). SQL Server откроет конструктор запросов для таблицы.
  • Отобразите панель сетки Grid PaneСортировка строк, щелкнув на кнопке Grid Pane (Панель сетки) в панели инструментов конструктора запросов.
    Сортировка строк
    увеличить изображение

  • Выберите для отображения только столбцы OilID, OilName и LatinName. Конструктор запросов выделит тусклым содержимое панели результатов Results Pane, указывая, что оно больше не отвечает спецификации запроса.
    Сортировка строк
    увеличить изображение

  • Нажмите кнопку Run (Выполнить)Сортировка строк в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов отобразит только заданные столбцы.
    Сортировка строк
    увеличить изображение

  • Установите тип сортировки Sort Type для поля OilName Ascending (По возрастанию).
    Сортировка строк
    увеличить изображение

  • Нажмите кнопку Run (Выполнить)Сортировка строк в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов отобразит строки, отсортированные по значению поля OilName.
    Сортировка строк
    увеличить изображение




  • Задайте условие WHERE с использованием панели SQL Pane


    Задайте условие WHERE с использованием панели SQL Pane
  • Скройте панель сетки Grid PaneЗадайте условие WHERE с использованием панели SQL Pane и отобразите панель SQL PaneЗадайте условие WHERE с использованием панели SQL Pane, щелкнув на кнопках в панели инструментов конструктора запросов.
    Задайте условие WHERE с использованием панели SQL Pane
    увеличить изображение

  • Измените фразу WHERE на WHERE (LEFT(OilName,1) = 'R').
    Задайте условие WHERE с использованием панели SQL Pane
    увеличить изображение

  • Нажмите кнопку Run (Выполнить)Задайте условие WHERE с использованием панели SQL Pane в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит названия ароматических масел, начинающихся с "R".
    Задайте условие WHERE с использованием панели SQL Pane
    увеличить изображение




  • Использование фразы FROM


    Базовая структура фразы FROM содержит имя одной таблицы или представления. Однако чтобы воспользоваться всей мощью реляционной модели, нужно иметь возможность извлекать столбцы из нескольких таблиц и представлений в одном запросе. Фраза FROM предоставляет механизм для осуществления этой операции с использованием следующего синтаксиса:
    FROM <таблица_или_предствление> <оператор_связывания> <таблица_или_предствление> ON <условие_связывания>
    Оператор связывания описывает тип выполняемого связывания. Microsoft SQL Server поддерживает внутреннее и внешнее связывание во всех их вариациях (см. урок 15).
    Условие связывания представляет собой выражение, аналогичное условию отбора, используемого в фразе WHERE. Оно задает, как будут соответствовать строки в двух таблицах. Большинство операций связывания выполняются на основе выражений эквивалентности, таких как Column A = Column B. Однако SQL Server поддерживает любые логические операторы, а условие связывания может быть сколь угодно сложным, состоящим из нескольких выражений, соединенных с помощью логических операторов AND или OR. таким же образом, как во фразе WHERE с несколькими условиями отбора.
    Выражение связывания может быть повторено для добавления дополнительных таблиц и представлений в запрос. Синтаксис для связывания нескольких таблиц следующий:
    FROM <таблица_или_вид> <оператор_связывания> <таблица_или_вид> ON <условие_связывания> <оператор_связывания> <таблица_или_вид> ON <условие_связывания> . . .
    Имеется теоретическое ограничение в 256 таблиц на запрос, однако весьма маловероятно, что вам когда-либо понадобится более пяти или шести таблиц, а обычно используется два или три. На деле, если вы обнаружите, что вам требуется связать более десяти таблиц в одном запросе, внимательно изучите схему вашей базы данных, чтобы убедиться, что она корректно нормализована.


    Объединения


    Последним типом связывания является объединения. Объединения помещают результаты выполнения двух различных операторов SELECT в один набор строк. При внутреннем и внешнем связывании столбцы из двух таблиц размещаются построчно. Объединение размещает строки из двух таблиц в одном столбце, как если бы вы взяли два набора строк и получили единое их множество, в котором один набор располагается под другим. Фактический порядок строк в полученном результате определяется фразой ORDER BY.
    Синтаксис объединения отличается от синтаксиса связывания. Он имеет следующий вид:
    SELECT <список_столбцов> FROM <имя_таблицы> UNION [ALL] SELECT <список_столбцов> FROM <имя_таблицы> [ORDER BY <список_столбцов>]
    Вы можете добавить в запрос столько операторов UNION SELECT, сколько захотите (с учетом ограничения в 256 таблиц), но все операторы SELECT должны возвращать одно и то же количество столбцов одинаковых или совместимых типов и в одном и том же порядке. Первый оператор SELECT будет определять имена столбцов, а фраза ORDER BY последнего оператора SELECT будет определять порядок сортировки.
    По умолчанию SQL Server не допускает дублирования строк в результате выполнения запроса с объединением. Если вы, однако, укажете UNION ALL, дублирующиеся строки будут сохранены.
    Создайте объединение
  • Откройте конструктор запросов Query Designer, щелкнув правой кнопкой мыши на таблице Properties в рабочей панели Details Pane, укажите на Open Table (Открытие таблицы) и выберите Return All Rows (Показать все строки).
  • Отобразите панель SQL Pane.Объединения
    Объединения
    увеличить изображение

  • Замените имеющийся оператор SQL следующим:
    SELECT 'PropertyTable' AS TableName, PropertyID AS ID, Property AS Quality FROM Properties UNION SELECT 'OdorTable', OdorID, Odor FROM Odors ORDER BY Quality
    Объединения
    увеличить изображение

  • Нажмите кнопку Run (Выполнить)Объединения в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer объединит результаты выполнения двух операторов SELECT.
    Объединения
    увеличить изображение




  • Создание связей


    Связи могут быть созданы в конструкторе запросов Query Designer либо с использованием панели сетки Grid Pane, либо с использованием панели SQL Pane. Панелью сетки Grid Pane лучше пользоваться, если вы связываете таблицы, которые являются формально зависимыми в схеме базы данных, поскольку конструктор запросов будет создавать связь между ними автоматически. Альтернативой является применение панели SQL Pane, которая обеспечивает большую гибкость.
    Имена объектов
    Если вы работаете с единственной таблицей или представлением, у вас скорее всего не будет неопределенности относительно исходного столбца, поскольку все имена столбцов в таблице должны быть уникальными. Если же вы работаете с несколькими таблицами в запросе, вам следует проявлять осторожность при указании имен столбцов.
    Полная спецификация для любого объекта базы данных определяется четырьмя идентификаторами: именем сервера, именем базы данных, именем владельца и именем объекта. Идентификаторы отделяются друг от друга точками. Таким образом, полное имя для таблицы Oils в моей системе будет следующим:
    BUNNY.Aromatherapy.dbo.Oils
    Некоторые объекты, такие как таблицы и представления, содержат другие объекты. Чтобы сослаться на один из таких объектов (в нашем случае, на столбцы), вы должны просто добавить его имя после имени объекта. Полное имя для столбца OilID таблицы Oils будет следующим:
    BUNNY.Aromatherapy.dbo.Oils.OilID
    К счастью, чтобы избежать двусмысленности, вам достаточно задать лишь часть иерархии. В запросе, основанном на единственной таблице, например, имени столбца само по себе будет достаточно для идентификации. Если же запрос связывает более одной таблицы, и таблицы содержат столбцы с одинаковыми именами, вы должны включить имя таблицы в имя объекта: Oils.OilID OilProperties.OilID делают различия вполне очевидными.


    Внутреннее связывание


    Наиболее распространенной формой связывания является внутреннее связывание. Внутреннее связывание возвращает только те строки, для которых условие связывания имеет значение TRUE.
    Свяжите две таблицы с использованием панели диаграмм Diagram Pane
  • Откройте конструктор запросов Query Designer для таблицы Oils, щелкнув правой кнопкой мыши на ее имени в рабочей панели Details Pane, указав на Open Table (Открытие таблицы) и выбрав Return All Rows (Показать все строки).
  • Отобразите панель диаграмм Diagram Pane,Внутреннее связывание щелкнув на кнопке Diagram Pane (Панель диаграмм) в панели инструментов конструктора запросов.
    Внутреннее связывание
    увеличить изображение

  • Нажмите кнопку Add Table (Добавить таблицу)Внутреннее связывание в панели инструментов конструктора запросов. Конструктор запросов Query Designer отобразит диалоговое окно Add Table (Добавление таблицы).
    Внутреннее связывание

  • Выделите таблицу PlantTypes в списке таблиц и нажмите кнопку Add (Добавить). SQL Server добавит таблицу в запрос.
  • Нажмите Close (Закрыть), чтобы закрыть диалоговое окно Add Table (Добавление таблицы).
    Внутреннее связывание
    увеличить изображение

  • Щелкните на кнопке SQL Pane (Панель SQL)Внутреннее связывание в панели инструментов конструктора запросов. Конструктор запросов Query Designer отобразит панель SQL Pane.
    Внутреннее связывание
    увеличить изображение

  • Удалите * после ключевого слова SELECT.
    Внутреннее связывание
    увеличить изображение

  • Щелкните на кнопке SQL Pane (Панель SQL)Внутреннее связывание в панели инструментов конструктора запросов. (Нажмите ОК, если конструктор запросов Query Designer отобразит сообщение об ошибке в синтаксисе оператора SELECT.) Конструктор запросов Query Designer скроет панель SQL Pane.

  • Внимание! Когда вы открываете конструктор запросов Query Designer, базовым оператором SQL всегда является SELECT *. Выбор определенных столбцов в панели диаграмм Diagram Pane приводит к добавлению их в список столбцов. Эта возможность предусмотрена Microsoft.

    Внутреннее связывание
    увеличить изображение



    Свяжите две таблицы с использованием панели SQL Pane

  • Скройте панель диаграмм Diagram PaneВнутреннее связывание и отобразите панель SQL Pane,Внутреннее связывание щелкнув на кнопках в панели инструментов конструктора запросов.

    Внутреннее связывание
    увеличить изображение

  • Замените имеющийся оператор SELECT на следующий:

    SELECT Oils.OilID, Oils.OilName, PlantParts.PlantPart FROM Oils INNER JOIN PlantParts ON Oils.PlantPartID = PlantParts.PlantPartID

    Внутреннее связывание
    увеличить изображение

  • Нажмите кнопку Run (Выполнить)Внутреннее связывание в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит значения PlantPart таблицы Oils для каждой строки.

    Внутреннее связывание
    увеличить изображение



  • Свяжите несколько таблиц с использованием панели диаграмм Diagram Pane

  • Скройте панель SQL PaneВнутреннее связывание и отобразите панель диаграмм Diagram Pane.Внутреннее связывание

    Внутреннее связывание
    увеличить изображение

  • Нажмите кнопку Add Table (Добавить таблицу) в панели инструментов конструктора запросов. Конструктор запросов Query Designer отобразит диалоговое окно Add Table (Добавление таблицы).

    Внутреннее связывание

  • Выделите таблицу PlantTypes в списке таблиц и нажмите кнопку Add (Добавить). SQL Server добавит таблицу в запрос.
  • Нажмите кнопку Close (Закрыть), чтобы закрыть диалоговое окно Add Table (Добавление таблицы).

    Внутреннее связывание
    увеличить изображение

  • В панели диаграмм Diagram Pane щелкните на столбце PlantType в таблице PlantTypes, чтобы добавить столбец в запрос.

    Внутреннее связывание
    увеличить изображение

  • Нажмите кнопку Run (Выполнить)Внутреннее связывание в панели инструментов конструктора запросов Query Designer, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит и столбец PlantPart, и столбец PlantType для каждого вида масла.

    Внутреннее связывание
    увеличить изображение



  • Свяжите несколько таблиц с использованием панели SQL Pane

  • Скройте панель диаграмм Diagram PaneВнутреннее связывание и отобразите панель SQL Pane.Внутреннее связывание
  • Замените имеющийся оператор SELECT следующим:

    SELECT Oils.OilID, Oils.OilName, Odors.Odor FROM Oils INNER JOIN OilOdors ON Oils.OilID = OilOdors.OilID INNER JOIN Odors ON OilOdors.OdorID = Odors.OdorID

    Внутреннее связывание
    увеличить изображение

  • Нажмите кнопку Run (Выполнить)Внутреннее связывание в панели инструментов конструктора запросов, чтобы исполнить запрос.

    Внутреннее связывание
    увеличить изображение

  • Закройте окно конструктора запросов Query Designer.



  • Использование фразы HAVING


    Фраза HAVING ограничивает строки, возвращаемые фразой GROUP BY, таким же образом, как фраза WHERE ограничивает строки, возвращаемые фразой SELECT. В один оператор SELECT может быть включена и фраза WHERE, и фраза HAVING – при этом фраза WHERE применяется до операции группировки, а фраза HAVING – после нее.
    Синтаксис фразы HAVING идентичен синтаксису фразы WHERE, за исключением того, что фраза HAVING может включать одну из функций агрегирования, включенных в список столбцов фразы SELECT. Заметим, однако, что вы должны повторять функцию агрегирования. Например, фраза HAVING, используемая в следующем операторе, является корректной:
    SELECT PlantParts.PlantPart, Count(Oils.OilName) as NumberOfOils FROM Oils INNER JOIN PlantParts ON Oils.PlantPartID = PlantParts.PlantPartID GROUP BY PlantParts.PlantPart HAVING Count(Oils.OilName) > 3
    Однако вы не можете использовать псевдоним для функции Count в фразе HAVING. Следовательно, приведенная ниже фраза HAVING не будет правильной:
    HAVING NumberOfOils > 3
    Создайте запрос с использованием ключевого слова HAVING в панели сетки Grid Pane
  • Скройте панель SQL PaneИспользование фразы HAVING и отобразите панель сетки Grid Pane.Использование фразы HAVING
    Использование фразы HAVING
    увеличить изображение

  • Добавьте > 5 в ячейку Criteria столбца OilName.
    Использование фразы HAVING
    увеличить изображение

  • Нажмите кнопку Run (Выполнить)Использование фразы HAVING в панели инструментов конструктора запросов, чтобы повторно исполнить запрос.
    Использование фразы HAVING
    увеличить изображение




  • Использование ключевого слова GROUP BY


    Фраза GROUP BY может быть задана с использованием любой из панелей конструктора запросов, но лучше всего это делать с помощью панели сетки Grid Pane и панели SQL Pane.
    Создайте запрос GROUP BY с использованием панели сетки Grid Pane
  • Скройте панель SQL PaneИспользование ключевого слова GROUP BY и отобразите панель сетки Grid Pane.Использование ключевого слова GROUP BY
    Использование ключевого слова GROUP BY
    увеличить изображение

  • Добавьте в запрос столбец OilName.
    Использование ключевого слова GROUP BY
    увеличить изображение

  • Нажмите кнопку Group By (Сгруппировать)Использование ключевого слова GROUP BY в панели инструментов конструктора запросов. Конструктор запросов Query Designer добавит столбец Group By в сетку и установит оба значения равными Group By.
    Использование ключевого слова GROUP BY
    увеличить изображение

  • Измените значение ячейки Group By для строки OilName на Count.
    Использование ключевого слова GROUP BY
    увеличить изображение

  • Нажмите кнопку Run (Выполнить)Использование ключевого слова GROUP BY, чтобы повторно исполнить запрос. Конструктор запросов Query Designer отобразит количество элементов OilName для каждого типа PlantType.
    Использование ключевого слова GROUP BY
    увеличить изображение




  • Использование оператора SELECT DISTINCT


    Ключевое слово DISTINCT может быть задано в операторе SQL конструктора запросов Query Designer, либо путем установки свойств запроса.
    Создайте запрос SELECT DISTINCT с использованием панели диаграмм Diagram Pane
  • Откройте конструктор запросов Query Designer для таблицы Oils, щелкнув правой кнопкой мыши на имени таблицы в рабочей панели Details Pane, укажите на Open Table (Открытие таблицы) и выберите Return All Rows (Показать все строки).
  • Отобразите панель диаграмм Diagram Pane, щелкнув на кнопке Diagram Pane (Панель диаграмм)Использование оператора SELECT DISTINCT в панели инструментов конструктора запросов.
    Использование оператора SELECT DISTINCT
    увеличить изображение

  • Нажмите кнопку Add Table (Добавить таблицу).Использование оператора SELECT DISTINCT Конструктор запросов Query Designer отобразит диалоговое окно Add Table (Добавление таблицы).
    Использование оператора SELECT DISTINCT

  • Выберите PlantParts в списке таблиц и нажмите Add (Добавить). Конструктор запросов Query Designer добавит таблицу в запрос.
  • Нажмите кнопку Close (Закрыть), чтобы закрыть диалоговое окно.
    Использование оператора SELECT DISTINCT
    увеличить изображение

  • Щелкните на кнопке SQL Pane (Панель SQL)Использование оператора SELECT DISTINCT в панели инструментов конструктора запросов. Конструктор запросов Query Designer отобразит панель SQL Pane.
    Использование оператора SELECT DISTINCT
    увеличить изображение

  • Удалите знак * после ключевого слова SELECT.
    Использование оператора SELECT DISTINCT
    увеличить изображение

  • Щелкните на кнопке SQL Pane (Панель SQL) в панели инструментов конструктора запросов. (Нажмите ОК, если конструктор запросов отобразит сообщение об ошибке в синтаксисе оператора SELECT.) Конструктор запросов Query Designer скроет панель SQL Pane.

  • Внимание! Когда вы открываете конструктор запросов Query Designer, базовым оператором SQL всегда является SELECT *. Выбор определенных столбцов в панели диаграмм Diagram Pane приводит к добавлению их в список столбцов. Эта возможность предусмотрена Microsoft.

    Использование оператора SELECT DISTINCT

  • Установите флажок DISTINCT Values (Различать значения).

    Использование оператора SELECT DISTINCT

  • Нажмите кнопку Close (Закрыть), чтобы закрыть диалоговое окно.
  • Нажмите кнопку Run (Выполнить)Использование оператора SELECT DISTINCT, чтобы повторно исполнить запрос.

    Использование оператора SELECT DISTINCT
    увеличить изображение

    Конструктор запросов Query Designer отобразит каждое значение лишь единожды.


  • Создайте запрос SELECT DISTINCT с использованием панели SQL Pane

  • Скройте панель диаграмм Diagram PaneИспользование оператора SELECT DISTINCT и отобразите панель SQL PaneИспользование оператора SELECT DISTINCT.
  • Замените имеющийся оператор SELECT на следующий:

    SELECT DISTINCT PlantTypes.PlantType FROM Oils INNER JOIN PlantTypes ON Oils.PlantTypeID = PlantTypes.PlantTypeID

    Использование оператора SELECT DISTINCT
    увеличить изображение

  • Нажмите кнопку Run (Выполнить)Использование оператора SELECT DISTINCT, чтобы повторно исполнить запрос. Конструктор запросов Query Designer отобразит отличающиеся значения PlantType, имеющиеся в таблице Oils.

    Использование оператора SELECT DISTINCT
    увеличить изображение




  • Оператор SELECT DISTINCT


    Хотя одной из целей применения реляционной модели базы данных является устранение повторяющихся данных, большинство баз данных неизбежно будут содержать одинаковые значения в нескольких строках. Например, таблица, содержащая информацию об адресах клиентов, будет, вероятно, включать одни и те же значения страны и штата для многих строк. Это не создает повторы строк и вполне допустимо, поскольку каждое значение штата является атрибутом отдельного клиента. Аналогично, таблица на стороне многих в отношении один-ко-многим может иметь любое заданное значение внешнего ключа, повторяющееся многократно. Это не только не является неправильным, но и необходимо для реляционной целостности базы данных.
    Однако это повторение может дать двусмысленные результаты после выполнения запроса. Для упомянутой таблицы клиентов Customer, содержащей, допустим, 10000 строк, из которых 90 процентов относятся к клиентам из Калифорнии, следующий запрос возвратит значение CA (штат Калифорния) 9000 раз – результат, который едва ли можно назвать полезным.
    SELECT State FROM Customer
    Использование ключевого слова DISTINCT в подобных ситуациях является спасением. Будучи помещенным непосредственно после SELECT, ключевое слово DISTINCT инструктирует SQL Server избегать дублирующихся строк в результирующем множестве. При этом следующий запрос возвратит каждое значение State для штата только один раз, что вам и нужно.
    SELECT DISTINCT State FROM Customer
    Совет. Ключевое слово DISTINCT имеет антипод ALL, который инструктирует SQL Server возвращать все строки, как уникальные, так или нет. Поскольку этот режим действует для оператора SELECT, слово ALL обычно не используется, но вы можете его включить, если при этом синтаксис запроса становится более понятным и очевидным.


    Использование представлений


    Создав представление, вы можете использовать его точно так же, как таблицу. Вы можете открыть его в Enterprise Manager с использованием конструктора представлений View Designer, либо включить его в другие запросы.
    Если вы открываете конструктор представлений View Designer для существующего представления, Enterprise Manager трактует его как виртуальную таблицу. Базовым оператором SQL является либо SELECT * FROM <имя представления>, либо SELECT TOP n FROM <имя представления>, но не оператор запроса, создавший представление.
    Откройте конструктор View Designer для представления
  • Перейдите к папке Views базы данных Aromatherapy в дереве консоли Console Tree. Enterprise Manager отобразит список представлений для базы данных.
    Использование представлений
    увеличить изображение

  • Щелкните правой кнопкой мыши на OilPropertiesExtended в рабочей панели Details Pane, укажите на Open View (Открытие представления) и выберите Return All Rows (Показать все строки). Enterprise Manager откроет конструктор представлений View Designer для данного представления.
    Использование представлений
    увеличить изображение

  • Щелкните на кнопке SQL Pane (Панель SQL)Использование представлений в панели инструментов конструктора представлений. Конструктор представлений View Designer отобразит панель SQL Pane, содержащую оператор SELECT для представления.
    Использование представлений
    увеличить изображение

  • Закройте конструктор представлений View Designer.


  • Использование представлений

  • Откройте вкладку Views (Представления) в диалоговом окне Add Table (Добавление таблицы).

    Использование представлений

  • Выделите OilPropertiesExtended в списке представлений, нажмите кнопку Add (Добавить), чтобы добавить представление в запрос, а затем нажмите кнопку Close (Закрыть), чтобы закрыть диалоговое окно. Конструктор запросов Query Designer добавит представление в запрос.

    Использование представлений
    увеличить изображение

  • Щелкните на кнопке SQL Pane (Панель SQL).Использование представлений Конструктор запросов Query Designer отобразит оператор SELECT для запроса.

    Использование представлений
    увеличить изображение

  • В панели SQL Pane замените * на Oils.OilName, OilPropertiesExtended.Property.

    Использование представлений
    увеличить изображение

  • Щелкните на кнопке SQL Pane (Панель SQL)Использование представлений, чтобы скрыть панель SQL Pane.

    Использование представлений
    увеличить изображение

  • Нажмите кнопку Run (Выполнить)Использование представлений в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит столбцы OilName Property.

    Использование представлений
    увеличить изображение

  • Закройте конструктор запросов Query Designer.



  • Изменение представлений


    Представление может быть изменено двумя способами: вы можете изменить его имя, либо вы можете изменить базовый оператор SQL для представления.
    Переименуйте представление
  • Перейдите к папке Views базы данных Aromatherapy в дереве консоли Console Tree. Enterprise Manager отобразит список представлений для базы данных.
    Изменение представлений
    увеличить изображение

  • Щелкните правой кнопкой мыши на представлении OilPropertiesExtended в рабочей панели Details Pane и выберите Rename (Переименовать). Enterprise Manager выделит имя представления.
    Изменение представлений
    увеличить изображение

  • Измените имя представления на OilPropExt и нажмите клавишу Enter. Enterprise Manager отобразит диалоговое окно, предупреждающее, что изменение имени представления сделает использование любых других объектов, которые на него ссылаются, некорректным.
    Изменение представлений

  • Нажмите Yes (Да). Enterprise Manager подтвердит изменение имени представления.
    Изменение представлений


  • Модифицируйте представление
  • Щелкните правой кнопкой мыши на OilCautionsExtended в рабочей панели Details Pane и выберите Design View (Конструирование представления). Enterprise Manager откроет конструктор View Designer для представления.
    Изменение представлений
    увеличить изображение

  • Скройте панель SQL Pane, щелкнув на кнопке SQL Pane (Панель SQL)Изменение представлений, и скройте панель результатов Results Pane, щелкнув на кнопке Results Pane (Панель результатов).Изменение представлений
    Изменение представлений
    увеличить изображение

  • Добавьте столбец OilID в таблицу Oils представления.
    Изменение представлений
    увеличить изображение

  • Нажмите кнопку Save (Сохранить)Изменение представлений в панели инструментов конструктора представлений. Конструктор представлений View Designer сохранит новое определение представления.
  • Закройте конструктор представлений View Designer.



  • Понятие о представлениях


    Хотя конструктор запросов Query Designer облегчает обращение к таблицам в вашей базе данных, постоянная корректировка или создание оператора запроса каждый раз заново может оказаться слишком утомительным и трудоемким. SQL Server предоставляет средства для хранения оператора SELECT в виде представления. В большинстве случаев данные, отображаемые представлением, не являются данными, хранящимися в базе данных, – в представлении хранится только оператор SELECT.
    Вы можете считать представление виртуальной таблицей. Она может использоваться точно так же, как обычная таблица. Возможность использования результатов выполнения одного оператора SELECT в качестве входной информации для другого оператора SELECT является одним из фундаментальных требований реляционной модели. Это требование основано на принципе замкнутости.
    Индексированные представления
    Новое в SQL Server 2000 – это его способность создавать индекс для представления. Если вы индексируете вид, результирующее множество представления хранится в базе данных и модифицируется при любой модификации базовых таблиц и представлений. При определенных обстоятельствах это может существенно улучшить производительность, поскольку нет необходимости пересчитывать результирующее множество при каждой ссылке на него.
    Индексированные представления работают лучше, если базовые данные меняются не слишком часто; в противном случае затраты на сопровождение индексированного представления будут выше, чем если бы вы пересчитывали представление по мере необходимости. Индексированные представления лучше всего использовать для следующих двух типов запросов:
  • запросы связывания и агрегирования, которые обрабатывают большое количество строк;
  • операции связывания и агрегирования, которые часто выполняются в других запросах.



  • Создание представлений


    Enterprise Manager предусматривает два метода для создания нового представления: мастер создания представления Create View Wizard, который проводит вас по всем этапам процедуры создания представления; и команда New View (Создать представление), которая открывает конструктор представлений View Designer. Конструктор представлений аналогичен конструктору запросов, за исключением того, что он дает возможность сохранять созданный вами оператор SELECT. Мастер создания представлений Create View Wizard является полезным инструментом, но иногда проще создать представление с помощью конструктора представлений View Designer.
    Создайте представление с использованием мастера Create View Wizard
  • Нажмите кнопку Wizard (Мастер)Создание представлений в панели инструментов Enterprise Manager. Enterprise Manager отобразит диалоговое окно Select Wizard (Выбор мастера).
    Создание представлений

  • Раскройте раздел Database, выберите Create View Wizard и нажмите ОК. Enterprise Manager отобразит первую страницу мастера создания представлений Create View Wizard.
    Создание представлений

  • Нажмите Next (Далее). Мастер создания представлений Create View Wizard отобразит страницу, запрашивающую имя базы данных, к которой будет относиться представление. Выберите базу данных Aromatherapy.
    Создание представлений

  • Нажмите Next (Далее). Мастер создания представлений отобразит страницу, предлагающую вам выбрать объекты для включения в представление.
    Создание представлений



  • Создание представлений

  • Нажмите Finish (Готово). Мастер создания представлений Create View Wizard отобразит сообщение, подтверждающее создание представления.

    Создание представлений



  • Создайте представление с использованием конструктора View Designer

  • В дереве консоли Console Tree Enterprise Manager перейдите к папке Views базы данных Aromatherapy. Enterprise Manager отобразит список имеющихся представлений.

    Создание представлений
    увеличить изображение

  • Нажмите New (Создать)Создание представлений в панели инструментов Enterprise Manager. Enterprise Manager откроет конструктор представлений View Designer с отображением всех четырех панелей.

    Создание представлений
    увеличить изображение

  • Щелкните на кнопке Add Table (Добавить таблицу)Создание представлений в панели инструментов конструктора представлений. Конструктор представлений View Designer отобразит диалоговое окно Add Table (Добавление таблицы).

    Создание представлений

  • На вкладке Tables (Таблицы) добавьте в запрос Properties, OilProperties и Oils, а затем нажмите Close (Закрыть), чтобы закрыть диалоговое окно.

    Создание представлений
    увеличить изображение

  • В панели сетки Grid Pane выберите столбцы Oils.OilID, Oils.OilName и Properties.Property для отображения их в результате.

    Создание представлений
    увеличить изображение

  • Нажмите кнопку Save (Сохранить).Создание представлений Конструктор запросов Query Designer отобразит диалоговое окно Save As (Сохранить как).

    Создание представлений

  • Введите OilPropertiesExtended в качестве имени представления.

    Создание представлений

  • Нажмите ОК. Конструктор представлений View Designer создаст новое представление.
  • Закройте конструктор представлений View Designer.



  • Понятие об операторе INSERT


    Синтаксис оператора INSERT похож на синтаксис оператора SELECT. Его базовая форма имеет следующий вид:
    INSERT [INTO] таблица_или_представление [(список_столбцов)] VALUES (список_значений)
    Каждый оператор INSERT может модифицировать только одну таблицу или представление. При использовании оператора INSERT для модификации представления следует учитывать следующие ограничения:
  • представление не должно содержать функций агрегирования, таких как COUNT или AVG;
  • представление не должно содержать операторов TOP, GROUP BY, UNION или DISTINCT;
  • представление не должно содержать вычисляемых столбцов;
  • представление должно ссылаться на таблицу во фразе FROM;
  • оператор INSERT модифицирует столбцы только из одной таблицы.

  • Список столбцов в операторе INSERT не является обязательным. Если он не указан, оператор INSERT должен включать значения для всех столбцов в таблице или представлении, а порядок их должен соответствовать порядку столбцов в таблице или представлении. Вы можете использовать ключевое слово DEFAULT, чтобы задать для строки значения, установленные по умолчанию.
    Если список столбцов присутствует, формат его подобен формату, используемому для списка столбцов в операторе SELECT: имена столбцов отделяются запятыми. Поскольку оператор INSERT может добавлять строку только в одну таблицу, вам нет необходимости использовать идентификатор имени таблицы в имени столбца.


    Вставка нескольких строк


    Оператор INSERT имеет вторую форму, которая использует оператор SELECT вместо списка VALUES с целью задания значений для строки (или строк), которая будет добавлена. Эта форма оператора INSERT имеет следующий вид:
    INSERT INTO таблица_или_представление [(список_столбцов)] SELECT [(список_столбцов) FROM таблица_или_представление [WHERE (условие)]
    Фраза WHERE в операторе является необязательной. Если она отсутствует, в таблицу или представление, заданные в фразе INSERT, будут добавлены все строки из таблицы или представления, заданных в фразе FROM.
    Вставьте несколько строк с использованием панели сетки Grid Pane
  • Перейдите к папке Tables базы данных Aromatherapy, щелкните правой кнопкой мыши на таблице MyOils, откройте Open Table (Открытие таблицы) и выберите Return All Rows (Показать все строки). Будет открыт новый экземпляр конструктора запросов Query Designer.
    Вставка нескольких строк
    увеличить изображение

  • Не закрывая конструктор запросов Query Designer, откройте новое представление таблицы Oils, щелкнув правой кнопкой мыши на таблице Oils, открыв Open Table (Открытие таблицы) и выбрав Query (Запрос). Будет открыт новый экземпляр конструктора запросов Query Designer.
    Вставка нескольких строк
    увеличить изображение

  • Скройте панель SQL PaneВставка нескольких строк и панель Results Pane.Вставка нескольких строк
    Вставка нескольких строк
    увеличить изображение

  • Щелкните на кнопке Change Query Type (Изменить тип запроса)Вставка нескольких строк в панели инструментов конструктора запросов и выберите Insert From (Вставить из) в списке. Конструктор запросов Query Designer отобразит диалоговое окно, предлагающее вам выбрать таблицу-адресат.
    Вставка нескольких строк

  • Выберите MyOils из списка и нажмите ОК. Конструктор запросов Query Designer добавит в панель сетки Grid Pane столбец Append.
    Вставка нескольких строк
    увеличить изображение

  • Измените запрос, чтобы вставить только столбцы OilName и LatinName.
    Вставка нескольких строк
    увеличить изображение

  • Добавьте Left(OilName, 6) в качестве вычисляемого столбца в панель сетки Grid Pane, снимите флажок в ячейке вывода Output и установите в ячейке условия Criteria значение <> 'Insert'.
    Вставка нескольких строк
    увеличить изображение

  • Нажмите кнопку Run (Выполнить)Вставка нескольких строк в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит сообщение, подтверждающее, что запрос был исполнен.
    Вставка нескольких строк

  • Нажмите ОК, чтобы закрыть окно сообщения. Перейдите к окну конструктора запросов Query Designer, отображающему все строки в таблице MyOils.
  • Нажмите кнопку Run (Выполнить)Вставка нескольких строк в панели инструментов конструктора запросов, чтобы повторно исполнить запрос SELECT *.
    Вставка нескольких строк
    увеличить изображение



  • Вставка нескольких строк

  • Нажмите ОК, чтобы закрыть окно сообщения. Перейдите к окну конструктора запросов Query Designer, отображающему все строки в таблице MyOils.
  • Нажмите кнопку Run (Выполнить)Вставка нескольких строк в панели инструментов конструктора запросов, чтобы повторно исполнить запрос SELECT *.

    Вставка нескольких строк
    увеличить изображение



  • Вставьте несколько строк с использованием панели SQL Pane

  • Перейдите к окну конструктора запросов Query Designer, содержащему оператор INSERT.
  • Скройте панель диаграмм Diagram PaneВставка нескольких строк и панель сетки Grid PaneВставка нескольких строк и отобразите панель SQL Pane.Вставка нескольких строк

    Вставка нескольких строк
    увеличить изображение

  • Замените оператор SQL на следующий: INSERT INTO MyOils (OilName, LatinName) SELECT OilName, LatinName FROM Oils WHERE (LEFT(OilName, 6) = 'Insert')

    Вставка нескольких строк
    увеличить изображение



  • Примечание. Единственное изменение здесь затрагивает только оператор WHERE.

  • Нажмите кнопку Run (Выполнить)Вставка нескольких строк в панели инструментов конструктора запросов, чтобы исполнить запрос. Enterprise Manager отобразит сообщение, подтверждающее, что запрос был исполнен.

    Вставка нескольких строк

  • Нажмите ОК, чтобы закрыть окно сообщения. Перейдите к окну конструктора запросов Query Designer, отображающему все строки таблицы MyOils.
  • Нажмите кнопку Run (Выполнить)Вставка нескольких строк в панели инструментов конструктора запросов, чтобы повторно исполнить запрос SELECT *. Осуществите прокрутку до конца таблицы, чтобы убедиться, что новые строки были добавлены.

    Вставка нескольких строк
    увеличить изображение

  • Закройте оба окна конструктора запросов Query Designer.



  • Вставка строк с использованием панели сетки Grid Pane


    Панель сетки Grid Pane предоставляет самый простой способ создания оператора INSERT, поскольку при этом не требуется запоминать синтаксис оператора.
    Вставьте строку с использованием панели сетки Grid Pane
  • Перейдите к папке Tables базы данных Aromatherapy, щелкните правой кнопкой мыши на таблице Oils в рабочей панели Details Pane, откройте меню Open Table (Открытие таблицы) и выберите Query (Запрос). Будет открыт конструктор запросов Query Designer с отображением четырех панелей.
    Вставка строк с использованием панели сетки Grid Pane
    увеличить изображение


  • Совет. Применение команды Query (Запрос) в меню Open Table (Открытие таблицы) или Open View (Открытие представления) является самым простым способом открыть конструктор запросов Query Designer с отображением всех панелей. Хотя устанавливаемым по умолчанию оператором SQL является SELECT * FROM <таблица_или_представление>, запрос не исполняется, поэтому никакие строки не возвращаются и не показываются.
  • Скройте панель SQL PaneВставка строк с использованием панели сетки Grid Pane и панель результатов Results Pane.Вставка строк с использованием панели сетки Grid Pane
    Вставка строк с использованием панели сетки Grid Pane
    увеличить изображение

  • Щелкните на кнопке Change Query Type (Изменить тип запроса)Вставка строк с использованием панели сетки Grid Pane в панели инструментов конструктора запросов и выберите Insert Into (Вставить в) из списка. Конструктор запросов Query Designer изменит вид панели сетки Grid Pane, чтобы она отображала только ячейки Column и New Value.
    Вставка строк с использованием панели сетки Grid Pane
    увеличить изображение

  • Добавьте столбец OilName в панели сетки Grid Pane и установите для New Value значение 'InsertFromGrid'.
    Вставка строк с использованием панели сетки Grid Pane
    увеличить изображение

  • Нажмите кнопку Run (Выполнить)Вставка строк с использованием панели сетки Grid Pane в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит сообщение, подтверждающее, что в таблицу добавлена одна строка.
    Вставка строк с использованием панели сетки Grid Pane

  • Нажмите ОК, чтобы закрыть окно сообщения. Не закрывая конструктор запросов Query Designer, откройте новое представление таблицы Oils, щелкнув правой кнопкой мыши на таблице Oils в рабочей панели Details Pane, указав на Open Table (Открытие таблицы) и выбрав Return All Rows (Показать все строки). Откроется новый экземпляр конструктора запросов, в котором будут отображены все строки из таблицы Oils.
    Вставка строк с использованием панели сетки Grid Pane
    увеличить изображение

  • Осуществите прокрутку до конца таблицы, чтобы убедиться, что новая строка добавлена.
    Вставка строк с использованием панели сетки Grid Pane
    увеличить изображение


  • Внимание! Значение OilID в вашей базе данных может не совпадать с представленным здесь. Помните, что столбец OilID был определен в качестве идентификационного столбца. Идентификационные столбцы в SQL Server гарантированно являются уникальными, но они не обязательно располагаются в последовательном порядке.


    Вставка строк с использованием панели SQL Pane


    Хотя панель сетки Grid Pane предоставляет простой метод создания оператора INSERT, но использование панели SQL Pane, позволяющее вводить оператор непосредственно, предоставляет большие функциональные возможности.
    Вставьте строку с использованием панели SQL Pane
  • Перейдите к окну конструктора запросов Query Designer, содержащему оператор INSERT.
  • Скройте панель сетки Grid PaneВставка строк с использованием панели SQL Pane и панель диаграмм Diagram PaneВставка строк с использованием панели SQL Pane и отобразите панель SQL Pane.Вставка строк с использованием панели SQL Pane
    Вставка строк с использованием панели SQL Pane
    увеличить изображение

  • Замените оператор SQL на следующий:
    INSERT INTO Oils (OilName) VALUES ('InsertFromSQL')
    Вставка строк с использованием панели SQL Pane
    увеличить изображение

  • Нажмите кнопку Run (Выполнить)Вставка строк с использованием панели SQL Pane в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит сообщение, подтверждающее, что строка добавлена.
    Вставка строк с использованием панели SQL Pane

  • Нажмите ОК, чтобы закрыть окно сообщения. Перейдите к окну конструктора запросов Query Designer, отображающему все строки из таблицы Oils.
  • Нажмите кнопку Run (Выполнить)
    Вставка строк с использованием панели SQL Pane

    в панели инструментов конструктора запросов, чтобы повторно исполнить запрос SELECT *, и осуществите прокрутку до конца таблицы, чтобы убедиться, что новая строка была добавлена.
    Вставка строк с использованием панели SQL Pane
    увеличить изображение



  • Вставка строк с использованием панели SQL Pane
    увеличить изображение



    Вставьте строку с использованием значений DEFAULT и NULL

  • Перейдите к окну конструктора запросов Query Designer, содержащему оператор INSERT.
  • Измените оператор SQL следующим образом:

    INSERT INTO Oils (OilName, LatinName, Sample) VALUES ('InsertDefault', NULL, DEFAULT)

    Вставка строк с использованием панели SQL Pane
    увеличить изображение

  • Нажмите кнопку Run (Выполнить)Вставка строк с использованием панели SQL Pane в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит сообщение, подтверждающее, что строка была добавлена.

    Вставка строк с использованием панели SQL Pane

  • Нажмите ОК, чтобы закрыть окно сообщения. Перейдите к окну конструктора запросов Query Designer, отображающему все строки из таблицы Oils.
  • Нажмите кнопку Run (Выполнить)Вставка строк с использованием панели SQL Pane в панели инструментов конструктора запросов, чтобы повторно исполнить запрос SELECT *, прокрутите окно до конца таблицы, чтобы убедиться, что новая строка была добавлена.

    Вставка строк с использованием панели SQL Pane
    увеличить изображение

  • Закройте окна конструктора запросов Query Designer.



  • Модификация строк с использованием фразы FROM


    Можно использовать фразу SELECT в операторе INSERT, чтобы вставить значения из другой таблицы (см. урок 17). Оператор UPDATE использует фразу FROM для извлечения значений из другой таблицы:
    UPDATE таблица_или_представление SET объекты_изменения FROM таблица_или_представление оператор_связывания условие_связывания [WHERE (условие_ограничения)]
    Фраза FROM здесь имеет тот же формат, что и фраза FROM в операторе SELECT. Так же, как и для оператора SELECT, вы можете задать более одной таблицы или представления путем добавления операторов связывания. Необязательное условие WHERE может использоваться для ограничения множества модифицируемых строк.
    Модифицируйте строки с использованием оператора FROM
  • Вернитесь к окну конструктора запросов Query Designer, содержащему оператор UPDATE.
  • Измените оператор SQL следующим образом:
    UPDATE MyOils SET MyOils.PlantPartID = Oils.PlantPartID FROM MyOils INNER JOIN Oils ON MyOils.OilName = Oils.OilName
    Модификация строк с использованием фразы FROM
    увеличить изображение


  • Внимание! Вы не можете использовать столбцы OilID для связывания двух таблиц, поскольку команды INSERT, которые вы использовали для добавления строк в уроке 17, создали новые значения OilID для каждой строки в таблице MyOils.
  • Нажмите кнопку Run (Выполнить)Модификация строк с использованием фразы FROM в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит сообщение о количестве строк, подвергшихся изменениям.
    Модификация строк с использованием фразы FROM

  • Вернитесь к окну конструктора запросов Query Designer, отображающему все строки из таблицы MyOils.
  • Нажмите кнопку Run (Выполнить)Модификация строк с использованием фразы FROM в панели инструментов конструктора запросов, чтобы исполнить запрос SELECT *.
    Модификация строк с использованием фразы FROM
    увеличить изображение




  • Модификация строк с использованием панели сетки Grid Pane


    Панель сетки Grid Pane конструктора запросов предоставляет возможности для создания запроса UPDATE.
    Модифицируйте все строки с использованием панели сетки Grid Pane
  • Перейдите к папке Tables базы данных Aromatherapy, щелкните правой кнопкой мыши на таблице MyOils в рабочей панели Details Pane, укажите на Open Table (Открытие таблицы) и выберите Query (Запрос). Будет открыт конструктор запросов Query Designer.
    Модификация строк с использованием панели сетки Grid Pane
    увеличить изображение

  • Скройте панель SQL Pane и панель диаграмм Diagram Pane, щелкнув на кнопке SQLМодификация строк с использованием панели сетки Grid Pane и на кнопке Diagram (Диаграмма).Модификация строк с использованием панели сетки Grid Pane
    Модификация строк с использованием панели сетки Grid Pane
    увеличить изображение

  • Не закрывая конструктор запросов Query Designer, откройте новое представление таблицы MyOils, щелкнув правой кнопкой мыши на таблице MyOils в рабочей панели Details Pane, указав на Open Table (Открытие таблицы) и выбрав Return All Rows (Показать все строки). Будет открыт новый экземпляр конструктора запросов Query Designer, отображающий все строки из таблицы MyOils.
    Модификация строк с использованием панели сетки Grid Pane
    увеличить изображение

  • Перейдите в окно конструктора запросов Query Designer, отображающее панель сетки Grid Pane и панель результатов Results Pane. Щелкните на кнопке Change Query Type (Изменить тип запроса)Модификация строк с использованием панели сетки Grid Pane в панели инструментов конструктора запросов и выберите Update (Модифицировать). Конструктор запросов добавит в сетку столбец нового значения New Value.
    Модификация строк с использованием панели сетки Grid Pane
    увеличить изображение

  • Добавьте столбец описания Description в панель сетки Grid Pane и установите на ячейке New Value значение "Description".
    Модификация строк с использованием панели сетки Grid Pane
    увеличить изображение

  • Нажмите кнопку Run (Выполнить)Модификация строк с использованием панели сетки Grid Pane в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит сообщение, подтверждающее, что строки были модифицированы.
    Модификация строк с использованием панели сетки Grid Pane

  • Перейдите к окну конструктора запросов Query Designer, отображающему все строки из таблицы MyOils.
  • Нажмите кнопку Run (Выполнить) в панели инструментов конструктора запросов, чтобы повторно исполнить запрос SELECT *.
    Модификация строк с использованием панели сетки Grid Pane
    увеличить изображение



  • Модификация строк с использованием панели сетки Grid Pane
    увеличить изображение

  • Добавьте столбец OilName в сетку и установите для него в ячейке условия Criteria значение = "Basil".

    Модификация строк с использованием панели сетки Grid Pane
    увеличить изображение

  • Нажмите кнопку Run (Выполнить)Модификация строк с использованием панели сетки Grid Pane в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит сообщение, подтверждающее, что строка была модифицирована.

    Модификация строк с использованием панели сетки Grid Pane

  • Перейдите к окну конструктора запросов Query Designer, отображающему все строки из таблицы MyOils.
  • Нажмите кнопку Run (Выполнить)Модификация строк с использованием панели сетки Grid Pane в панели инструментов конструктора запросов, чтобы исполнить запрос SELECT *.

    Модификация строк с использованием панели сетки Grid Pane
    увеличить изображение




  • Модификация строк с использованием панели SQL Pane


    Как и для других форм запросов, непосредственный ввод оператора UPDATE в панели SQL обеспечивает большую гибкость.
    Модифицируйте все строки с использованием панели SQL Pane
  • Перейдите к окну, содержащему оператор UPDATE.
  • Отобразите панель SQL PaneМодификация строк с использованием панели SQL Pane и скройте панель сетки Grid Pane.Модификация строк с использованием панели SQL Pane
    Модификация строк с использованием панели SQL Pane
    увеличить изображение

  • Измените оператор SQL следующим образом:
    UPDATE MyOils SET Sample = "Sample Field"
    Модификация строк с использованием панели SQL Pane
    увеличить изображение

  • Нажмите кнопку Run (Выполнить)Модификация строк с использованием панели SQL Pane в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит сообщение о количестве строк, подвергшихся изменениям в результате выполнения запроса.
    Модификация строк с использованием панели SQL Pane

  • Перейдите к окну конструктора запросов Query Designer, отображающему все строки из таблицы MyOils.
  • Нажмите кнопку Run (Выполнить)Модификация строк с использованием панели SQL Pane в панели инструментов конструктора запросов, чтобы повторно исполнить запрос SELECT *.
    Модификация строк с использованием панели SQL Pane
    увеличить изображение




  • Понятие об операторе UPDATE


    Оператор UPDATE позволяет изменять значения в одной или в нескольких строках таблицы. Базовый синтаксис оператора UPDATE следующий:
    UPDATE таблица_или_представление SET объекты_изменения [WHERE (условие)]
    Подобно оператору INSERT, один оператор UPDATE может модифицировать только одну таблицу или представление. Для обновления представления с помощью оператора UPDATE существуют те же ограничения, что и для обновления представления с помощью оператора INSERT:
  • представление не должно содержать функций агрегирования, таких как COUNT или AVG;
  • представление не должно содержать TOP, GROUP BY, UNION или DISTINCT;
  • представление не должно содержать вычисляемых столбцов;
  • представление должно ссылаться на таблицу, указанную в фразе FROM;
  • оператор UPDATE должен модифицировать столбцы только из одной таблицы.

  • За ключевым словом SET следует перечень подлежащих обновлению столбцов, отделяемых запятыми, а также их новые значения. Форма записи при этом следующая: имя_столбца = новое_значение. Новое значение может быть константой или выражением, которое также может ссылаться на сам столбец. Например, выражение SalesPrice = SalesPrice * .90 будет уменьшать значения в столбце SalesPrice на 10 процентов.
    Фраза WHERE является необязательной. Если она имеется, то должна задавать строки, подлежащие обновлению. Если фраза WHERE в операторе UPDATE отсутствует, будут модифицироваться все строки в таблице.


    Удаление строк с использованием панели сетки Grid Pane и панели диаграмм Diagram Pane


    Панель сетки и панель диаграмм конструктора запросов Query Designer предоставляют графические средства для создания операторов DELETE; однако, они не поддерживают применение фразы FROM, которая дает возможность использовать в операторе DELETE дополнительные таблицы и представления.
    Удалите избранные строки из таблицы
  • Перейдите к папке Tables базы данных Aromatherapy. SQL Server отобразит список таблиц в рабочей панели Details Pane.
    Удаление строк с использованием панели сетки Grid Pane и панели диаграмм Diagram Pane
    увеличить изображение

  • Щелкните правой кнопкой мыши на таблице MyOils, укажите на Open Table (Открытие таблицы) и выберите Query (Запрос). Будет открыт конструктор запросов Query Designer.
    Удаление строк с использованием панели сетки Grid Pane и панели диаграмм Diagram Pane

  • Скройте панель SQL PaneУдаление строк с использованием панели сетки Grid Pane и панели диаграмм Diagram Pane и панель результатов Results Pane.Удаление строк с использованием панели сетки Grid Pane и панели диаграмм Diagram Pane
    Удаление строк с использованием панели сетки Grid Pane и панели диаграмм Diagram Pane

  • Щелкните на кнопке Change Query Type (Изменить тип запроса)Удаление строк с использованием панели сетки Grid Pane и панели диаграмм Diagram Pane в панели инструментов конструктора запросов, а затем выберите Delete (Удалить).
    Удаление строк с использованием панели сетки Grid Pane и панели диаграмм Diagram Pane
    увеличить изображение




  • Удаление строк с использованием панели SQL Pane


    Как и в других случаях, непосредственный ввод оператора DELETE в панели SQL Pane конструктора запросов Query Designer обеспечивает большую гибкость, однако при этом вам необходимо помнить синтаксис оператора.
    Удалите строки с использованием фразы WHERE
  • Вернитесь к окну конструктора запросов, содержащему оператор DELETE.
  • Отобразите панель SQL PaneУдаление строк с использованием панели SQL Pane и скройте панель диаграмм Diagram PaneУдаление строк с использованием панели SQL Pane и панель сетки Grid Pane.Удаление строк с использованием панели SQL Pane
    Удаление строк с использованием панели SQL Pane
    увеличить изображение

  • Замените оператор SQL следующим:
    DELETE FROM MyOils WHERE (OilName = 'Basil')
    Удаление строк с использованием панели SQL Pane
  • Нажмите кнопку Run (Выполнить)Удаление строк с использованием панели SQL Pane в панели инструментов конструктора запросов, чтобы исполнить запрос. Enterprise Manager отобразит сообщение, подтверждающее, что строка была удалена.
    Удаление строк с использованием панели SQL Pane

  • Вернитесь к окну конструктора запросов, отображающему все строки в таблице MyOils.
  • Нажмите кнопку Run (Выполнить)Удаление строк с использованием панели SQL Pane в панели инструментов конструктора запросов, чтобы повторно исполнить базовый запрос SELECT*. Убедитесь, что строка для Basil была удалена.
    Удаление строк с использованием панели SQL Pane
    увеличить изображение



  • Удаление строк с использованием панели SQL Pane
    увеличить изображение

  • Скройте панель диаграмм Diagram PaneУдаление строк с использованием панели SQL Pane и панель сетки Grid Pane.Удаление строк с использованием панели SQL Pane

    Удаление строк с использованием панели SQL Pane
    увеличить изображение

  • Щелкните на кнопке Change Query Type (Изменить тип запроса)Удаление строк с использованием панели SQL Pane в панели инструментов конструктора запросов и выберите Delete (Удалить). Конструктор запросов изменит оператор DELETE в панели SQL Pane.

    Удаление строк с использованием панели SQL Pane
    увеличить изображение

  • Не закрывая окно конструктора запросов, откройте представление таблицы Oils, щелкнув правой кнопкой мыши на имени таблицы в рабочей панели Details Pane, открыв Open Table (Открытие таблицы) и выбрав Return All Rows (Показать все строки).

    Удаление строк с использованием панели SQL Pane
    увеличить изображение

  • Вернитесь к окну конструктора запросов, содержащему оператор DELETE.
  • Измените оператор SQL следующим образом:

    DELETE PlantParts WHERE (PlantPartID = 10)

    Удаление строк с использованием панели SQL Pane
    увеличить изображение

  • Нажмите кнопку Run (Выполнить)Удаление строк с использованием панели SQL Pane в панели инструментов конструктора запросов, чтобы исполнить запрос. Enterprise Manager отобразит сообщение, подтверждающее, что строка была удалена.

    Удаление строк с использованием панели SQL Pane

  • Вернитесь к окну конструктора запросов, отображающему все строки из таблицы Oils.
  • Нажмите кнопку Run (Выполнить)Удаление строк с использованием панели SQL Pane в панели инструментов конструктора запросов, чтобы повторно исполнить базовый запрос SELECT *. Убедитесь, что строки, для которых значение PlantPartID равно 10, были удалены.

    Удаление строк с использованием панели SQL Pane
    увеличить изображение

  • Закройте окна конструктора запросов Query Designer.



  • Удаление всех строк с помощью оператора TRUNCATE TABLE


    Оператор TRUNCATE TABLE может быть выполнен только из панели SQL Pane конструктора запросов Query Designer.
    Удалите все строки с использованием оператора TRUNCATE TABLE
  • Щелкните правой кнопкой мыши на таблице MyOils в рабочей панели Details Pane, открыв меню Open Table (Открытие таблицы) и выбрав Query (Запрос). Будет открыто окно конструктора запросов Query Designer.
    Удаление всех строк с помощью оператора TRUNCATE TABLE

  • Скройте панель диаграмм Diagram PaneУдаление всех строк с помощью оператора TRUNCATE TABLE и панель сетки Grid Pane.Удаление всех строк с помощью оператора TRUNCATE TABLE
    Удаление всех строк с помощью оператора TRUNCATE TABLE
    увеличить изображение

  • Замените имеющийся оператор SQL на следующий:
    TRUNCATE TABLE MyOils
    Удаление всех строк с помощью оператора TRUNCATE TABLE
    увеличить изображение

  • Не закрывая текущее окно конструктора запросов, откройте новое представление таблицы MyOils, щелкнув правой кнопкой мыши на имени таблицы в рабочей панели Details Pane, открыв меню Open Table (Открытие таблицы) и выбрав Return All Rows (Показать все строки).
    Удаление всех строк с помощью оператора TRUNCATE TABLE
    увеличить изображение

  • Вернитесь к окну конструктора запросов, содержащему оператор TRUNCATE TABLE.
  • Нажмите кнопку Run (Выполнить)Удаление всех строк с помощью оператора TRUNCATE TABLE в панели инструментов конструктора запросов, чтобы исполнить запрос. Enterprise Manager отобразит сообщение, подтверждающее, что запрос был успешно исполнен.
    Удаление всех строк с помощью оператора TRUNCATE TABLE

  • Вернитесь к окну конструктора запросов, отображающему все строки из таблицы MyOils.
  • Нажмите кнопку Run (Выполнить)Удаление всех строк с помощью оператора TRUNCATE TABLE в панели инструментов конструктора запросов, чтобы повторно исполнить базовый запрос SELECT *. Убедитесь, что все строки были удалены.
    Удаление всех строк с помощью оператора TRUNCATE TABLE
    увеличить изображение




  • Использование мастера Copy Database Wizard


    Мастер копирования Copy Database Wizard может быть вызван через диалоговое окно Select Wizard (Выбор мастера), а также через меню All Tasks (Все задачи) контекстного меню для папки Server или для папки Databases.
    Скопируйте базу данных
    Внимание! Чтобы выполнить это упражнение, вы должны иметь доступ к серверу.
  • Перейдите к базе данных Aromatherapy, а затем щелкните на кнопке Wizard (Мастер).Использование мастера Copy Database Wizard SQL Server отобразит диалоговое окно Select Wizard (Выбор мастера).
    Использование мастера Copy Database Wizard

  • Выберите Copy Database Wizard в категории Management, а затем нажмите ОК. SQL Server отобразит первую страницу мастера Copy Database Wizard.
    Использование мастера Copy Database Wizard

  • Нажмите Next (Далее). Мастер отобразит страницу, запрашивающую имя сервера, на котором содержится копируемая база данных.
    Использование мастера Copy Database Wizard

  • Если необходимо, выберите метод аутентификации, а затем нажмите Next (Далее). Мастер отобразит страницу, запрашивающую имя сервера, на который будет копироваться база данных.
    Использование мастера Copy Database Wizard

  • Выберите место назначения из поля списка, а затем нажмите Next (Далее). Мастер отобразит страницу, запрашивающую имя базы данных, подлежащей перемещению или копированию.
    Использование мастера Copy Database Wizard

  • Установите флажок Copy (Копировать) для базы данных Aromatherapy.
    Использование мастера Copy Database Wizard

  • Нажмите Next (Далее). Мастер отобразит страницу, показывающую место размещения выходного файла.
    Использование мастера Copy Database Wizard


  • Совет. Если для какого-либо файла в ячейке статуса Status имеется крестик, вы можете воспользоваться кнопкой Modify (Изменить), чтобы разрешить проблему.


    Использование мастера импорта DTS Import Wizard


    Мастер DTS Import Wizard дает возможность импортировать данные из различных типов источников данных, в том числе:
  • источников данных OLE DB и ODBC;
  • текстовых файлов;
  • соединений с другими экземплярами Microsoft SQL Server;
  • баз данных Oracle и Informix;
  • рабочих листов Microsoft Excel;
  • баз данных Microsoft Access и Microsoft FoxPro;
  • баз данных dBase и Paradox.

  • Импортируйте таблицу с использованием мастера DTS Import Wizard
  • Перейдите к базе данных Aromatherapy в Enterprise Manager. SQL Server отобразит список объектов, имеющихся в базе данных.
    Использование мастера импорта DTS Import Wizard
    увеличить изображение

  • Нажмите кнопку Wizard (Мастер)Использование мастера импорта DTS Import Wizard в панели инструментов Enterprise Manager. SQL Server отобразит диалоговое окно Select Wizard (Выбор мастера).
    Использование мастера импорта DTS Import Wizard

  • Выберите DTS Import Wizard в категории Data Transformation Services и нажмите ОК. SQL Server отобразит первую страницу мастера экспорта/импорта DTS Import/Export Wizard.
    Использование мастера импорта DTS Import Wizard

  • Нажмите Next (Далее). Мастер отобразит страницу, предлагающую вам указать источник данных.
    Использование мастера импорта DTS Import Wizard

  • Выберите в качестве источника данных Microsoft Access. Мастер изменит параметры для источника данных.
    Использование мастера импорта DTS Import Wizard

  • Нажмите кнопку Browse (Обзор)Использование мастера импорта DTS Import Wizard, чтобы указать имя и местонахождение файла источника данных. Мастер отобразит диалоговое окно Select File (Выбор файла).
    Использование мастера импорта DTS Import Wizard

  • Перейдите к папке SQL 2000 Step by Step в корневой директории и выделите базу Aromatherapy.
    Использование мастера импорта DTS Import Wizard



  • Использование мастера импорта DTS Import Wizard

  • Здесь мы также принимаем предложенные по умолчанию параметры, поскольку нам требуется скопировать данные из таблиц. Нажмите Next (Далее). Мастер отобразит список таблиц, имеющихся в базе данных.

    Использование мастера импорта DTS Import Wizard



  • Примечание. При выборе на предыдущей странице другой опции, Use A Query To Specify The Data To Transfer (Использовать запрос для указания передаваемых данных), появится диалоговое окно, предлагающее ввести оператор SQL.

  • Выберите таблицу NewOils. Мастер предполагает, что таблица назначения будет носить такое же имя, что и исходная.

    Использование мастера импорта DTS Import Wizard

  • Нажмите кнопку Browse (Обзор)Использование мастера импорта DTS Import Wizard в столбце Transform. Мастер отобразит диалоговое окно Column Mappings And Transformation (Соответствия столбцов и преобразования).

    Использование мастера импорта DTS Import Wizard

  • Измените размер столбца OilName на 25, чтобы импортировать только начальную часть содержимого столбца OilName.

    Использование мастера импорта DTS Import Wizard

  • Нажмите ОК, чтобы закрыть диалоговое окно, а затем нажмите Next (Далее). Мастер отобразит страницу, запрашивающую, хотите ли вы импортировать данные немедленно, либо сделать это позднее.

    Использование мастера импорта DTS Import Wizard



  • Совет. Эта страница мастера также предоставляет вам возможность сохранить ваши параметры для импорта в виде DTS-пакета. Это может оказаться особенно полезным, если вам потребуется снова выполнить операцию импортирования.

  • Примите предложенную по умолчанию опцию Run Immediately (Выполнить немедленно) и нажмите Next (Далее). Мастер отобразит страницу, подтверждающую выбранные вами параметры.

    Использование мастера импорта DTS Import Wizard

  • Нажмите кнопку Finish (Готово). Мастер отобразит диалоговое окно, показывающее ход исполнения DTS-пакета, после чего выведет сообщение, подтверждающее, что таблица была успешно импортирована.

    Использование мастера импорта DTS Import Wizard

  • Нажмите ОК, чтобы закрыть окно сообщения.

    Использование мастера импорта DTS Import Wizard

  • Нажмите Done (Готово).
  • Перейдите к папке Tables, чтобы убедиться, что таблица NewOils была добавлена в базу данных Aromatherapy.

    Использование мастера импорта DTS Import Wizard
    увеличить изображение



  • Совет. Если таблица не отображается, выберите Refresh (Обновить) из меню Action (Действие), чтобы обновить список.


    Использование мастера экспорта DTS Export Wizard


    Как вы можете догадаться, мастер экспорта DTS Export Wizard выполняет ту же функцию, что и мастер импорта DTS Import Wizard, но в обратном направлении.
    Экспортируйте таблицу с использованием мастера экспорта DTS Export Wizard
  • Перейдите к базе данных Aromatherapy и нажмите кнопку Wizard (Мастер).Использование мастера экспорта DTS Export Wizard
    Использование мастера экспорта DTS Export Wizard

  • Выберите DTS Export Wizard в категории Data Transformation services, а затем нажмите ОК. SQL Server отобразит первую страницу мастера DTS Import/Export Wizard.
    Использование мастера экспорта DTS Export Wizard

  • Нажмите Next (Далее). Мастер отобразит страницу, запрашивающую источник данных.
    Использование мастера экспорта DTS Export Wizard

  • Выберите в качестве базы данных Aromatherapy, а затем нажмите Next (Далее). Мастер отобразит страницу, запрашивающую вид выходных данных.
    Использование мастера экспорта DTS Export Wizard

  • Выберите в качестве выходных данных Text File.
    Использование мастера экспорта DTS Export Wizard

  • Нажмите кнопку Browse (Обзор)Использование мастера экспорта DTS Export Wizard справа от поля имени файла File Name. Мастер отобразит диалоговое окно Select File (Выбор файла).
    Использование мастера экспорта DTS Export Wizard




  • Подключение базы данных


    После того, как база данных была отключена от сервера, вы можете переместить или скопировать ее файл данных и журнал транзакций, как вы это делаете для любых других файлов операционной системы. Далее вы можете подключить базу данных к этому же или к другому серверу.
    Повторно подключите базу данных Aromatherapy
  • Щелкните правой кнопкой мыши на папке Database сервера, который вы используете для выполнения упражнений, укажите на All Tasks (Все задачи) и выберите Attach Database (Подключить базу данных). SQL Server отобразит диалоговое окно Attach Database (Подключение базы данных).
    Подключение базы данных

  • Нажмите кнопку Browse (Обзор).Подключение базы данных SQL Server отобразит диалоговое окно Browse For Existing File (Просмотр файлов).
    Подключение базы данных

  • Перейдите к папке SQL 2000 Step by Step в корневой директории, выберите Aromatherapy.mdf, а затем нажмите ОК. SQL Server запишет в место размещения файла файл данных и журнал транзакций.
    Подключение базы данных

  • Нажмите ОК. SQL Server отобразит сообщение, подтверждающее, что база данных была успешно подключена.
    Подключение базы данных




  • Добавление объектов в панель редактирования Editor Pane


    Наиболее простой и удобной возможностью при работе в Object Browser является использование приема "перетащить-и-оставить". Всякий раз, когда вам необходимо задать объект в Object Browser, вам достаточно просто перетащите его в панель редактирования Editor Pane окна Query (Запрос), и его имя будет вставлено в окно редактирования.
    Совет. Если вы перетащили одну из функций, отображенную в папке Common Objects, Object Browser вставит только имя функции, без параметров. Для вставки полного синтаксиса функции используйте команду Scripting, которую мы рассмотрим в следующем разделе.
    Добавьте объект базы данных
  • Выберите окно Query (Запрос), убедитесь, что вкладка Editor (Редактор) открыта, а затем в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Clear Window (Очистить окно). Добавление объектов в панель редактирования Editor Pane Query Analyzer очистит панель редактирования Editor Pane.
  • В панели редактирования Editor Pane введите следующий оператор SQL (не забудьте поставить пробел после FROM):
    SELECT * FROM
  • В Object Browser раскройте папку User Tables.
    Добавление объектов в панель редактирования Editor Pane
    увеличить изображение

  • Перетащите таблицу dbo.Properties из панели Object Browser в панель редактирования Editor Pane и поместите ее после слова FROM. Query Analyzer вставит имя таблицы в оператор.
    Добавление объектов в панель редактирования Editor Pane

  • Нажмите на кнопке Execute Query (Выполнить запрос)Добавление объектов в панель редактирования Editor Pane для выполнения запроса. Query Analyzer отобразит результаты в панели сетки Grids Pane.
    Добавление объектов в панель редактирования Editor Pane


  • Добавьте в папку все объекты
  • В окне Query (Запрос) выберите еще раз вкладку Editor (Редактор).
  • Удалите * из оператора SELECT.
    Добавление объектов в панель редактирования Editor Pane

  • В Object Browser раскройте папку dbo.Properties.
    Добавление объектов в панель редактирования Editor Pane
    увеличить изображение

  • Перетащите папку Columns из панели Object Browser в панель редактирования Editor Pane и вставьте ее после слова SELECT. Query Analyzer вставит в оператор все имена столбцов.
    Добавление объектов в панель редактирования Editor Pane
    увеличить изображение

  • Для выполнения запроса нажмите кнопку Execute Query (Выполнить запрос)Добавление объектов в панель редактирования Editor Pane в панели инструментов анализатора запросов Query Analyzer. Query Analyzer отобразит результаты в панели сетки Grids Pane.
    Добавление объектов в панель редактирования Editor Pane




  • Использование сценариев SQL


    Сценарий (script) представляет собой набор операторов Transact-SQL, хранимых в файле. Сценарии часто используются для постоянного хранения команд для записей, используемых для создания и заполнения объектов базы данных. Поскольку сценарии хранятся в тестовом файле, а не в базе данных, то они могут быть использованы для воссоздания базы данных на других серверах. (SQL Server использовал сценарии для создания шаблонных баз данных Pubs и Northwind).
    Хотя сценарии очень часто используются для создания объектов базы данных, они могут применяться не только для этого. В сценарий может быть включен любой допустимый операторы Transact-SQL.
    В сценарии операторы SQL группируются в пакеты. Сценарий может содержать один или несколько пакетов, а каждый пакет может содержать один или более операторов SQL. В сценарии, содержащем более одного пакета, пакеты разделяются командой GO. Если сценарий не содержит команды GO, все операторы будут выполняться как один пакет.
    Создайте сценарий
  • В окне Query (Запрос) измените оператор SQL, как показано ниже:
    SELECT, OilName, LEFT(LatinName, 10) FROM Oils GO SELECT PlantPartID, PlantPart FROM PlantParts

  • Примечание. В запрос, использовавшийся в предыдущем упражнении, были добавлены только три последние строки.
  • В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Execute Query (Выполнить запрос). Query Analyzer отобразит результат в двух панелях вкладки Grids (Сетка) окна Query (Запрос).
    Использование сценариев SQL

  • В окне Query (Запрос) выберите вкладку Editor (Редактор) и нажмите кнопку Save (Сохранть)Использование сценариев SQL в панели инструментов анализатора запросов Query Analyzer. Query Analyzer отобразит диалоговое окно Save Query (Сохранение запроса).
    Использование сценариев SQL


  • Примечание. Если вы не выберите вкладку Editor (Редактор) перед нажатием кнопки Save (Сохранть), анализатор запросов Query Analyzer сохранит результаты выполнения запроса, а не сам запрос.
  • Перейдите к папке SQL 2000 Step By Step в корневой директории и присвойте сценарию имя Lesson21.
    Использование сценариев SQL

  • Нажмите Save (Сохранить). Query Analyzer сохранит новый файл сценария.


  • Откройте сценарий

  • В панели инструментов анализатора запросов Query Analyzer нажмите кнопку New Query (Новый запрос).Использование сценариев SQL Query Analyzer откроет новое пустое окно Query (Зарос).

    Использование сценариев SQL

  • Нажмите кнопку Open (Открыть)Использование сценариев SQL в панели инструментов анализатора запросов Query Analyzer. Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла запроса).

    Использование сценариев SQL

  • В корневой директории найдите и откройте папку SQL 2000 Step by Step, и выберите Lesson21.

    Использование сценариев SQL

  • Нажмите Open (Открыть). Query Analyzer отобразит сценарий в окне Query (Запрос).

    Использование сценариев SQL

  • В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Execute Query (Выполнить запрос)Использование сценариев SQL для запуска сценария. Query Analyzer отобразит результаты во вкладке Grids (Сетка).

    Использование сценариев SQL

  • Закройте окно сценария.



  • Открытие объектов


    Если вы в Object Browser нажмете правой кнопкой мыши на таблице или представлении и выберите Open (Открыть), анализатор запросов Query Analyzer отобразит строки в таблице (или результаты выполнения оператора SELECT для представления) в окне Open Table (Открытие таблицы).
    Откройте таблицу
  • В Object Browser раскройте папку User Tables базы данных Aromatherapy. Query Analyzer отобразит список таблиц базы данных.
    Открытие объектов
    увеличить изображение

  • Правой кнопкой мыши щелкните на dbo.PlantParts и выберите Open (Открыть). Query Analyzer отобразит в окне Open Table (Открытие таблицы) строки из таблицы.
    Открытие объектов

  • Закончив просмотр строк в таблице, закройте окно Open Table (Открытие таблицы).

  • Откройте представление
  • В Object Browser раскройте папку Views базы данных Aromatherapy. Query Analyzer отобразит список всех представлений в базе данных.
    Открытие объектов
    увеличить изображение

  • Правой кнопкой мыши щелкните на dbo.OilCautionsExtented и выберите Open (Открыть). Query Analyzer отобразит ряды, возвращенные после запроса, в окне Open Table (Открытие таблицы).
    Открытие объектов

  • Закончив просмотр строк в таблице, закройте окно Open Table (Открытие таблицы).



  • Скриптование объектов


    Скриптование (создание сценария действия) является более сложной версией приема "перетащить-и-оставить" Object Browser. Скриптование создает полный оператор Transact-SQL и может выполняться из контекстного меню большинства объектов. Не все типы сценариев применимы ко всем типам объектов, а к таким типам, как параметры функции или столбцы, операция скриптования не может быть применена вообще.
    Имеющиеся сценарии и объекты, к которым они могут быть применены, представлены в Таблице 21.2. Большинство из этих сценариев мы рассмотрим в следующем уроке о, посвященном созданию и обслуживанию объектов базы данных.

    Таблица 21.2. Опции скриптованияКоманда сценарияОбъекты
    Create (Cоздать)Таблица, индекс, ограничение, триггер, представление, хранимая процедура
    Alter (Изменить)Триггер, вид
    Drop (Изъять)Таблица, индекс, ограничение, триггер, представление, хранимая процедура
    Select (Выбрать)Таблица, представление
    Insert (Вставить)Таблица, представление
    Update (Обновить)Таблица, представление
    Delete (Удалить)Таблица, представление
    Execute (Выполнить)Хранимая процедура, функция

    Сценарии могут быть записаны в новое окне Query (Запрос), в файл сценария или в буфер обмена (откуда они могут быть вставлены в существующее окно запроса Query). Некоторые сценарии, такие как сценарии выполнения функции, используют замещаемые параметры. Query Analyzer предоставляет диалоговое окно для удобства замещения этих параметров соответствующими значениями.
    Напишите сценарий для оператора SELECT
  • В Object Browser в базе данных Aromatherapy раскройте папку User Tables.
  • Правой кнопкой мыши щелкните на таблице dbo.OilProperties, укажите на Script Object To New Window As (Описать объект в новом окне как) и выберите Select (Выбрать). Query Analyzer откроет новое окно Query (Запрос), содержащий оператор SELECT.
    Скриптование объектов
    увеличить изображение


  • Совет. Object Browser создает оператор SELECT в отдельной строке. Для удобства вы можете отредактировать его, что показано на рисунке.
  • Для выполнения запроса нажмите кнопку Execute Query (Выполнить запрос)Скриптование объектов в панели инструментов анализатора запросов Query Analyzer. Query Analyzer отобразит результаты в панели сетки Grids Pane.

    Скриптование объектов

  • После завершения работы с запросом закройте окно Query (Запрос).

  • Напишите сценарий для функции
  • В папке Common Objects раскройте папку String Functions.
    Скриптование объектов

  • Правой кнопкой мыши щелкните на функции LEFT, перейдите к Script Object To New Window As (Описать объект в новом окне как) и выберите Execute (Выполнить). Query Analyzer откроет новое окно Query (Зарос) с оператором SELECT, включающим функцию.
    Скриптование объектов
    увеличить изображение

  • В меню Edit (Правка) выберите Replace Template Parameters (Заместить шаблонные параметры).
    Скриптование объектов

  • Для параметра character_expression введите значение 'Test Expression', а для параметра integer_expression введите значение 4.
    Скриптование объектов

  • Нажмите Replace All (Заместить все). Query Analyzer заместит параметры в запрос.
    Скриптование объектов

  • Для выполнения запроса нажмите кнопку Execute Query (Выполнить запрос)Скриптование объектов в панели инструментов анализатора запросов Query Analyzer. Query Analyzer отобразит результаты в панели сетки Grids Pane.
    Скриптование объектов



  • Ввод операторов Transact-SQL


    Простейшим способом использования окна Query (Запрос) является ввод операторов SQL, как мы это делали в панели SQL конструктора запросов Query Designer. В отличии от окна конструктора запросов Query Designer, окно Query (Запрос) анализатора запросов Query Analyzer предоставляет некоторый дополнительный сервис, выделяя различными цветами введенные вами операторов Transact-SQL. В Таблица 21.1 приведены цвета, используемые в окне Query (Запрос).

    Таблица 21.1. Цветное кодирование, используемое в окне Query анализатора запросов Query Analyzer.ЦветНазначение
    СинийКлючевое слово
    Темно зеленыйКомментарий
    Темно красныйХранимая процедура
    СерыйОператор
    ЗеленыйСистемная таблица
    ПурпурныйСистемная функция
    КрасныйСимвольная строка

    Выполните запрос SELECT
  • В окне Query введите следующий оператор SELECT:
    SELECT OilName, LEFT(LatinName, 10) FROM Oils
  • Окно Query (Запрос) изменит цвет введенного текста.
    Ввод операторов Transact-SQL

  • В панели инструментов анализатора запросов Query Analyzer нажмите на кнопке Execute Query (Выполнить запрос).Ввод операторов Transact-SQL Анализатор запросов Query Analyzer добавит в окно Query (Запрос) панель, содержащую две вкладки: вкладку Grids (Сетка), содержащую результаты запроса и вкладку Messages (Сообщения), содержащую сообщения.
    Ввод операторов Transact-SQL

  • Выберите вкладку Messages(Сообщения). Окно Query (Запрос) отобразит сообщения, сформированные запросом.
    Ввод операторов Transact-SQL


  • Отобразите результаты запроса в отдельной таблице
  • В меню Tools (Сервис) анализатора запросов Query Analyzer выберите Options (Параметры). Query Analyzer отобразит диалоговое окно Options (Параметры).
  • Выберите вкладку Editor (Редактор)
    Ввод операторов Transact-SQL

  • Установите флажок Tabbed Mode (Vs. Splitter Mode).
  • Нажмите OK. Query Analyzer изменит способ отображения окна Query (Запрос).
    Ввод операторов Transact-SQL




  • Выбор базы данных


    Query Analyzer будет использовать текущую выбранную базу данных для разрешения ссылок в запросах и других операторах Transact-SQL. Панель инструментов, показанная на рис. 21-1, содержит поле со списком, в котором отображается текущая выбранная база данных. Вы можете переключится на другую базу данных, выбрав ее имя в панели инструментов или в меню Query (Запрос).
    Выбор базы данных
    увеличить изображение
    Рис. 21.1. 
    Выберите базу данных с помощью панели инструментов
  • В поле со списком панели инструментов выберите Northwind.
    Выбор базы данных
    увеличить изображение


  • Выберите базу данных из меню Query (Запрос)
  • В меню Query (Запрос) выберите Change Database (Сменить базу данных). Query Analyzer отобразит диалоговое окно Select Database (Выбор базы данных).
    Выбор базы данных


  • Совет. Вы также можете воспользоваться комбинацией клавиш Ctrl + U для открытия диалогового окна Select Database (Выбор базы данных).
  • Нажмите в любое место этой таблицы для выбора базы данных Aromatherapy.
    Выбор базы данных

  • Нажмите OK. Query Analyzer выберет базу данных Aromatherapy.



  • Запуск Query Analyzer


    Вы можете запустить Query Analyzer из Enterprise Manager или из меню Start (Пуск) в Windows. Если вы запустили Query Analyzer из Enterprise Manager, Query Analyzer будет передавать информацию о соединении из Enterprise Manager: если вы подключены к серверу, то Query Analyzer будет соединяться с этим сервером, и если у вас по умолчанию установлена какая-либо база данных, то Query Analyzer будет выбирать именно эту базу данных.
    Совет. Для запуска Query Analyzer воспользуйтесь командой isqlw из командной строки.
    Если вы запустили Query Analyzer из меню Start (Пуск) или если вы не создали в Enterprise Manager соединения с сервером или базой данных, вы должны будете в Query Analyzer создать соединение вручную.
    Запустите Query Analyzer из Enterprise Manager
  • В Enterprise Manager в дереве консоли Console Tree найдите базу данных Aromatherapy. В рабочей панели Details Pane SQL Server отобразит список объектов базы данных.
    Запуск Query Analyzer
    увеличить изображение

  • В меню Tools (Сервис) выберите SQL Query Analyzer. SQL Server откроет Query Analyzer и автоматически соединиться с сервером и базой данных Aromatherapy.
    Запуск Query Analyzer
    увеличить изображение


  • Примечание. Если в Query Analyzer не отображается окно просмотра объектов Object Browser, нажмите F8 для его отображения.
  • Закройте Query Analyzer.

  • Запустите Query Analyzer из меню Start (Пуск)
  • В панели задач нажмите кнопку Start (Пуск).
  • Перейдите к Programs (Программы) и выберите папку Microsoft SQL Server. Откроется папка Microsoft SQL Server со списком значков.
  • Щелкните на значке Query Analyzer.Запуск Query Analyzer Query Analyzer отобразит диалоговое окно Connect To SQL Server (Соединение с SQL Server).
    Запуск Query Analyzer

  • Убедитесь в правильном выборе сервера и режима аутентификации, а затем нажмите OK. Query Analyzer соединится с сервером, а затем откроется. Query Analyzer соединится с той базой данных, которая была выбрана по умолчанию для вашей учетной записи.

  • Совет. Если ваш сервер не настроен на автоматический запуск при соединении, вы можете установить флажок Start SQL Server If It Stopped (Запускать SQL Server, если он остановлен) для включения этой опции.
    Запуск Query Analyzer
    увеличить изображение



    Использование шаблонов


    Язык SQL несколько отличается от большинства других языков программирования, таких как C++ или Microsoft Visual Basic, тем, что в нем есть относительно немного операторов, но синтаксис их может быть довольно сложным. Одна из претензий, часто предъявляемых к языку SQL, состоит в том, что все данные извлекаются с помощью одного оператора: оператора SELECT.
    Шаблоны являются превосходным средством для работы с составными операторами SQL. При работе с SQL длительное время, вы начинаете замечать, что часто используете лишь несколько более или менее стандартных комбинаций основных команд: например оператор SELECT для двух таблиц, имеющих внутреннюю связь INNER JOIN, или оператор CREATE TABLE с идентификационным столбцом IDENTITY. Сохранив, эти операторы как шаблон, вы одной командой сможете воспроизвести весь содержащийся в шаблоне текст. Для настройки операторов вы можете воспользоваться удобным диалоговым окном.
    Совет. Шаблоны могут применяться не только к одной команде. Они могут состоять из любого числа операторов, подобно файлам SQL-сценариев, и могут содержать множество команд и пакетов.
    Несмотря на широту предоставляемых возможностей, шаблоны просты в использовании и создании. Они являются обычными файлами SQL-сценариев с расширением .tql (по умолчанию). Элементы шаблона могут настраиваться. Например, в операторе CREATE TABLE имена столбцов и таблиц могут быть определены как параметры. В шаблоне параметр имеет такую форму: <имя_параметра, тип_данных, значение>. Например, представленный ниже шаблон сценария, содержит два параметра: table_name и sort_name:
    SELECT * FROM ORDER BY
    Сценарий определяет оба параметра как имеющие тип данных sysname, который является специальным типом, используемым для указания имен объектов. Параметр table_name имеет значение по умолчанию "test_view", а параметр sort_column имеет значение по умолчанию "test_column".
    Анализатор запросов Query Analyzer предоставляет диалоговое окно Replace Template Parameters (Замещение параметров шаблона) для удобного ввода текста в шаблон. Чтобы отобразить это диалоговое окно, откройте шаблон в окне Query (Запрос) и выберите Replace Template Parameters (Замещение параметров шаблона) из меню Edit (Правка).
    Совет. Для открытия диалогового окна Replace Template Parameters (Замещение параметров шаблона) вы также можете воспользоваться комбинацией клавиш Ctrl + Shift + M.
    Сформируйте оператор CREATE TABLE с помощью шаблона
  • В Object Browser выберите вкладку Templates (Шаблоны). Query Analyzer отобразит список категорий для доступных шаблонов.

    Использование шаблонов
    увеличить изображение

  • Раскройте папку CREATE TABLE и дважды щелкните на кнопке CREATE TABLE WITH IDENTITY. Query Analyzer откроет новое окно запроса и вставит туда шаблонный текст.

    Использование шаблонов
    увеличить изображение

  • В меню Edit (Правка) выберите Replace Template Parameters (Замещение параметров шаблона). Query Analyzer откроет диалоговое окно Replace Template Parameters (Замещение параметров шаблона).

    Использование шаблонов

  • Установите следующие значения параметров: ПараметрЗначение
    Table_nameTemplateTable
    Column_1TemplateID
    Datatype_for_column_1Smallint
    Seed1
    Increment1
    Column_2Description
    Datatype_for_column_2Varchar (20)
    Использование шаблонов

  • Нажмите Replace All (Заместить все). Query Analyzer закроет диалоговое окно и подставит значения параметра в параметр в шаблоне.

    Использование шаблонов
    увеличить изображение

  • Убедитесь, что база данных Aromatherapy выбрана в панели инструментов анализатора запросов Query Analyzer.

    Использование шаблонов
    увеличить изображение

  • Чтобы выполнить оператор, нажмите кнопку Execute Query (Выполнить запрос)Использование шаблонов в панели инструментов анализатора запросов Query Analyzer. Query Analyzer создаст таблицу.
  • В Object Browser выберите вкладку Objects (Объекты), раскройте папку User Tables и нажмите клавишу F5 для обновления содержимого экрана. Object Browser отобразит в списке новую таблицу TemplateTable.

    Использование шаблонов
    увеличить изображение

  • Закройте окно Query (Запрос), содержащее оператор CREATE TABLE.



  • Изменение объектов


    В то время как оператор CREATE создает новый объект, оператор ALTER предоставляет механизм для изменения определения объекта. Не все объекты, созданные с помощью оператора CREATE, имеют соответствующий оператор ALTER. В таблице 22.2 приведен синтаксис для объектов, которые могут быть изменены.

    Таблица 22.2. Операторы ALTERСинтаксис оператора ALTERДействие
    ALTER DATABASE <имя> <спецификация_файла>Изменяет файлы, используемые для хранения базы данных

    ALTER FUNCTION <имя> RETURNS <возвращаемое_значение> AS < операторы_tsql>
    Изменяет операторы Transact-SQL, содержащие функцию

    ALTER PROCEDURE <имя> AS < операторы_tsql>
    Изменяет операторы Transact-SQL, содержащие в себе хранимую процедуру (См. урок 28, "Хранимые процедуры")

    ALTER TABLE <имя> <определение_изменения>
    Изменяет определение таблицы (В этом уроке мы подробно рассмотрим <определение_изменения>.)

    ALTER TRIGGER <имя> {FOR | AFTER | INSTEAD OF} <действие_dml>
    Изменяет операторы Transact-SQL, содержащие в себе триггер (См. урок 29, "Триггеры")

    ALTER VIEW <имя> AS <оператор_выборки>
    Изменяет операторы SELECT, которые создают представление

    Оператор ALTER TABLE является составным по той же причине, почему и оператор CREATE TABLE: определение таблицы состоит из нескольких различных частей. Упрощенная версия синтаксиса для оператора ALTER TABLE приведена ниже:
    ALTER TABLE <имя> { [ALTER COLUMN <определение_столбца>] | [ADD <определение_столбца>] | [DROP COLUMN <имя_столбца>] | [ADD [WITH NOCHECK] CONSTRAINT <ограничение_для_таблицы>] }
    Ключевые слова CHECK (подразумевается) и NOCHECK перед ограничением таблицы, предписывают SQL Server тестировать или не тестировать имеющиеся в таблице данные с учетом нового ограничения. WITH NOCHECK используется лишь в крайне редких случаях.
    Изменение столбцов
    Ниже представлено несколько ограничений для фразы ALTER COLUMN. Столбец не может быть изменена, если он:
  • имеет тип данных text, image, ntext или timestamp;
  • определен в таблице как ROWGIDCOL;
  • является вычисляемым столбцом или используется в вычисляемом столбце;
  • является реплицированным;
  • используется в индексе – если только столбец не имеет тип данных varchar, nvarchar или varbinary; тип данных не изменяется и размер столбца не уменьшается;
  • используется в статистике, генерируемой оператором CREATE STATISTIC;
  • используется в ограничении PRIMARY KEY;
  • используется в ограничении FOREIGN KEY REFERENCES;
  • используется в ограничении CHECK;
  • используется в ограничении UNIQUE;
  • указывается как DEFAULT.


  • Измените представления

  • В Object Browser раскройте папку Columns запроса SimpleView.

    Изменение объектов
    увеличить изображение

  • В окне запроса выберите вкладку Editor (Редактор) и в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Clear Window (Очистить окно)Изменение объектов для очистки содержимого панели редактирования Editor Pane.
  • В панели редактирования введите следующий оператор:

    ALTER VIEW SimpleView AS SELECT SimpleDescription, RelatedDescription FROM RelatedTable INNER JOIN SimpleTable ON RelatedTable.SimpleID = SimpleTable.SimpleID

    Изменение объектов

  • Для выполнения оператора в панели инструментов анализатора запросов Query Analyzer нажмите на кнопку Execute Query (Выполнить запрос).Изменение объектов
  • Щелкните на любом месте в панели Object Browser для ее выбора и нажмите клавишу F5 для обновления содержимого экрана. Object Browser отобразит только столбцы SimpleDescription и RelatedDescription.

    Изменение объектов
    увеличить изображение



  • Добавьте столбцы в таблицу

  • В Object Browser раскройте папку Columns таблицы SimpleTable.

    Изменение объектов
    увеличить изображение

  • В окне запроса выберите вкладку Editor (Редактор) и в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Clear Window (Очистить окно)Изменение объектов для очистки содержимого панели редактирования Editor Pane.
  • В панели редактирования введите следующий оператор:

    ALTER TABLE SimpleTable ADD NewColumn varchar(20)

    Изменение объектов

  • Для выполнения оператора в панели инструментов анализатора запросов Query Analyzer нажмите на кнопку Execute Query (Выполнить запрос).Изменение объектов Query Analyzer добавит столбец в таблицу.
  • Щелкните на любом месте в панели Object Browser для ее выбора и нажмите клавишу F5 для обновления содержимого окна. Object Browser отобразит новый столбец.

    Изменение объектов
    увеличить изображение



  • Измените столбцы в таблице

  • В окне запроса выберите вкладку Editor (Редактор) и в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Clear Window (Очистить окно)Изменение объектов для очистки содержимого панели редактирования Editor Pane.
  • В панели редактирования введите следующий оператор:

    ALTER TABLE SimpleTable ADD COLUMN NewColumn varchar(10)



    Изменение объектов

  • Для выполнения оператора, в панели инструментов анализатора запросов Query Analyzer нажмите на кнопку Execute Query (Выполнить запрос).Изменение объектов Query Analyzer добавит столбец в таблицу.
  • Щелкните на любом месте в панели Object Browser для ее выбора и нажмите клавишу F5 для обновления содержимого окна. Object Browser отобразит новый столбец.

    Изменение объектов
    увеличить изображение



  • Удалите столбцы из таблицы

  • В окне запроса выберите вкладку Editor (Радактор) и в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Clear Window (Очистить окно)Изменение объектов для очистки содержимого панели редактирования Editor Pane.
  • В панели редактирования введите следующий оператор:

    ALTER TABLE SimpleTable DROP COLUMN NewColumn

    Изменение объектов

  • Для выполнения оператора в панели инструментов анализатора запросов Query Analyzer нажмите на кнопку Execute Query (Выполнить запрос).Изменение объектовQuery Analyzer удалит столбец из таблицы.
  • Щелкните на любом месте в панели Object Browser для ее выбора и нажмите клавишу F5 для обновления содержимого окна. Object Browser больше не будет отображать столбец NewColumn.

    Изменение объектов
    увеличить изображение




  • Скриптование DDL


    Создать два сценария для операторов SELECT можно в панели Object Browser. Object Browser поддерживает сценарии CREATE, ALTER и DROP для большинства объектов базы данных. После генерации сценария вы можете видоизменить его для решения своих задач.
    Совет. Операторы CREATE, созданные скриптованием, могут быть сохранены в файле сценария. Это удобно для документирования структуры базы данных.
    Сформируйте сценарий CREATE TABLE
  • В Object Browser щелкните правой кнопкой мыши на таблице Cautions, перейдите к Script Object To New Window AS и выберите CREATE. Query Analyzer откроет новое окно запроса, содержащие оператор CREATE для создания таблицы Cautions.
    Скриптование DDL
    увеличить изображение


  • Примечание. Поскольку база данных не может содержать несколько таблиц с одинаковыми именами, вы должны отредактировать оператор, если вы хотите выполнить его сейчас. Если вы не хотите создавать новую таблицу, просто закройте окно запроса и перейдите к следующему разделу.
  • Измените имя таблицы в операторе на DuplicateCautions, а имя в ограничении PRIMARY KEY на PK_ DuplicateCautions.
    Скриптование DDL
    увеличить изображение

  • Для выполнения оператора в панели инструментов анализатора запросов Query Analyzer нажмите на кнопку Execute Query (Выполнить запрос).Скриптование DDLQuery Analyzer создаст новую таблицу.
  • Щелкните на любом месте в панели Object Browser для ее выбора и нажмите клавишу F5 для обновления содержимого окна. Object Browser отобразит в списке новую таблицу DuplicateCautions.
    Скриптование DDL
    увеличить изображение

  • Закройте окно запроса, содержащее оператор CREATE.



  • Создание объектов


    Объекты базы данных создаются программным путем с помощью оператора CREATE. Точный синтаксис оператора CREATE различен для каждого объекта, однако объекты, которые вы можете создавать, а также базовый синтаксис оператора CREATE для каждого объекта, вы можете найти в таблице 22.1.

    Таблица 22.1. Операторы CREATE.Синтаксис оператора CREATEСоздаваемый объект
    CREATE DATABASE <имя>Создает базу данных
    CREATE DEFAULT <имя> AS < выражение_константы >Создает значение по умолчанию
    CREATE FUNCTION <имя> RETURNS <возвращаемое_значение> AS <операторы_tsql>Создает пользовательскую функцию (См. урок 30, "Пользовательские функции")
    CREATE INDEX <имя> ON <таблица_или_представление> (<индексируемые_столбцы>)Создает индекс в таблице или представление
    CREATE PROCEDURE <имя> AS < операторы_tsql>Создает хранимую процедуру (См. урок 28, "Хранимые процедуры")
    CREATE RULE <имя> AS <условное_выражение>Создает роль базы данных
    CREATE SCHEMA AUTHORIZATION <владелец> <определения_объектов>Создает таблицы, представления и разрешения как один объект
    CREATE STATISTICS <имя> ON < таблица_или_представление> (<столбцы>)Создает статистические данные, используемые оптимизатором запросов
    CREATE TABLE <имя> (<определение_таблицы>)Создает таблицу
    CREATE TRIGGER <имя> {FOR | AFTER | INSTEAD OF} < действие_dml> AS <операторы_tsql>Создает триггер (См. уроку 29, "Триггеры")
    CREATE VIEW <имя> AS < оператор_выборки>Создает представление

    Из операторов CREATE, рассмотренных в таблице 22.1, только оператор CREATE TABLE является достаточно сложным. Это вызвано тем, что определение таблицы составляет несколько различных элементов. Вы должны определить столбцы, а каждый столбец должен иметь имя и тип данных. Вы можете задать для столбцов возможность использования нулевых (NULL) значений идентификационной строке или в GUID, значение по умолчанию, любые ограничения, применимые к столбцу, а также несколько других свойств, которые мы не будем здесь рассматривать. Упрощенная версия синтаксиса, для определения столбцов имеет следующий вид:

    <имя_столбца> <тип_данных> [NULL | NOT NULL] [ [DEFAULT <значение_по_умолчанию>] | [IDENTITY [(начальное_значение>, <шаг_увеличения>)[NOT FOR REPLLCATION]]]] [ROWGUIDCOL] [<ограничение_для_столбца>[, <ограничение_для_столбца>...]]

    Учтите, что указывание значений по умолчанию и спецификации идентичности является взаимоисключающим. Так, вы можете задавать значения по умолчанию для столбца или для идентификационного столбца, но никак не для обоих.

    Описание для <ограничение_для_столбца> представлено ниже:

    [CONSTRAINT <имя_ограничения] [ [PRIMARY KEY | UNIQUE] [CLUSTERED | NONCLUSTERED] | [[FOREIGN KEY] REFERENCES <ссылочная_таблица> (имя_столбца)] | [CHECK [NOT FOR REPLICATION] (<логическое выражение>)] ]

    Вы можете задавать более одного выражения <ограничение_для_столбца> для столбца, но при этом вы должны задать тип каждого ограничения (PRIMARY KEY/UNIQUE, FOREIGN KEY или CHECK).

    Все это выглядят несколько пугающе, но если вы начнете с основных определений (например, MyColumn varchar 20) и будете просто добавлять необходимые фразы, то увидите, что все не так уж сложно. Как и в приведенных ниже примерах, вам почти никогда не придется использовать более двух или трех фраз в одном определении столбца:

    MyColumn varchar(20) MyColumn varchar(20) NOT NULL MyColumn varchar(20) PRIMARY KEY CLUSTERED MyColumn varchar(20) IDENTITY (1, 1) PRIMARY KEY CLUSTERED MyColumn varchar(20) NOT NULL FOREIGN KEY REFERENCES Oils (OilName)



    Создание объектов
    увеличить изображение

  • Нажмите клавишу F5, чтобы обновить содержимое экрана. В списке появится SimpleTable.

    Создание объектов
    увеличить изображение



  • Совет. Если окно Query (Запрос) отобразит сообщение о том, что объект с именем "SimpleTable" уже существует, то вам не следует щелкать на Object Browser перед нажатием клавиши F5.

    Создайте таблицу с ограничением внешнего ключа.

  • В окне запроса выберите вкладку Editor (Редактор) и в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Clear Window (Очистить окно)Создание объектов для очистки содержимого панели редактирования Editor Pane.
  • В панели редактирования введите следующий оператор:

    CREATE TABLE RelatedTable ( RelatedID smallint IDENTITY (1,1) PRIMARY KEY CLUSTERED, SimpleID smallint REFERENCES SimpleTable (SimpleID), RelatedDescription varchar(20) )

    Создание объектов

  • Чтобы выполнить оператор, в панели инструментов анализатора запросов Query Analyzer нажмите на кнопку Execute Query (Выполнить запрос).Создание объектов Query Analyzer создаст таблицу.
  • Чтобы выбрать Object Browser, щелкните на любом месте в его панели.
  • Нажмите клавишу F5, чтобы обновить содержимое экрана. Object Browser отобразит в папке User Tables новую таблицу RelatedTable.

    Создание объектов
    увеличить изображение



  • Создайте представление

  • В окне запроса выберите вкладку Editor (Редактор) и в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Clear Window (Очистить окно)Создание объектов для очистки содержимого панели редактирования Editor Pane.
  • В панели редактирования введите следующий оператор:

    CREATE VIEW SimpleView AS

    SELECT RelatedID, SimpleDescription, RelatedDescription FROM RelatedTable INNER JOIN SimpleTable ON RelatedTable.SimpleID = SimpleTable.SimpleID

    Создание объектов

  • Для выполнения оператора, в панели инструментов анализатора запросов Query Analyzer нажмите на кнопку Execute Query (Выполнить запрос).Создание объектов Query Analyzer создаст представление.
  • В Object Browser раскройте папку View для базы данных Aromatherapy. (Если папка View уже раскрыта, щелкните на любом месте в панели Object Browser для ее выбора.)

    Создание объектов
    увеличить изображение

  • Нажмите клавишу F5, чтобы обновить содержимое экрана. Object Browser отобразит в папке View новое представление SimpleView.



    Создание объектов
    увеличить изображение



  • Создайте индекс

  • В окне запроса выберите вкладку Editor (Редактор) и в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Clear Window (Очистить окно)Создание объектов для очистки содержимого панели редактирования Editor Pane.
  • В панели редактирования введите следующий оператор:

    CREATE INDEX SimpleIndex ON SimpleTable (SimpleDescription)

    Создание объектов

  • Для выполнения оператора в панели инструментов анализатора запросов Query Analyzer нажмите на кнопку Execute Query (Выполнить запрос).Создание объектов Query Analyzer создаст индекс.
  • В таблице SimpleTable раскройте папку Indexes и убедитесь, что индекс SimpleIndex добавлен.

    Создание объектов
    увеличить изображение




  • Удаление объектов


    Оператор DROP удаляет объект базы данных. В отличие от операторов CREATE и ALTER, операторы DROP имеют простой и неизменный синтаксис:
    DROP <тип_объекта> <имя>
    <тип_объекта> - любой объект из таблицы 22.1, исключая схему.
    Удалите индекс
  • В Object Browser раскройте папку Indexes таблицы SimpleTable.
    Удаление объектов
    увеличить изображение

  • В окне запроса выберите вкладку Editor (Редактор) и в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Clear Window (Очистить окно)Удаление объектов для очистки содержимого панели редактирования Editor Pane.
  • В панели редактирования введите следующий оператор:
    DROP INDEX SimpleTable.SimpleIndex
    Удаление объектов

  • Для выполнения оператора в панели инструментов анализатора запросов Query Analyzer нажмите на кнопку Execute Query (Выполнить запрос).Удаление объектовQuery Analyzer удалит индекс.
  • Щелкните на любом месте в панели Object Browser для ее выбора и нажмите клавишу F5 для обновления содержимого окна. Object Browser отобразит пустую папку индексов.
    Удаление объектов
    увеличить изображение


  • Удалите таблицу
  • В окне запроса выберите вкладку Editor (Редактор) и в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Clear Window (Очистить окно)Удаление объектов для очистки содержимого панели редактирования Editor Pane.
  • В панели редактирования введите следующий оператор:
    DROP TABLE RelatedTable
    Удаление объектов

  • Для выполнения оператора в панели инструментов анализатора запросов Query Analyzer нажмите на кнопку Execute Query (Выполнить запрос).Удаление объектов Query Analyzer удалит таблицу.
  • В панели Object Browser раскройте папку User Tables базы данных Aromatherapy и нажмите клавишу F5 для обновления содержимого экрана. Таблицы RelatedTable в списке уже не будет.
    Удаление объектов
    увеличить изображение




  • Использование мастера Index Tuning Wizard


    Настройка базы данных не может выполняться в пустоте. Не имеет смысла вопрос, какая схема работает лучше в абсолютном выражении. Нас прежде всего интересует, какое сочетание представлений и индексов приведет к наиболее быстрому выполнению конкретных операций. По этой причине мастеру Index Tuning Wizard требуется предоставить определенные данные о загруженности, в качестве которых может выступать либо SQL-сценарий, либо данные трассировки сервера из SQL Profiler.
    Вторая страница мастера требует, чтобы вы указали сервер и базу данных для анализа, а также предоставляет две дополнительных опции выбора: Keep All Existing Indexes (Не изменять существующие индексы) и Tuning Mode (Режим настройки). Опция режимов настройки Tuning Mode задает глубину анализа, выполняемого мастером. Сбросив установленный по умолчанию флажок Keep All Existing Indexes (Не изменять существующие индексы), вы позволите мастеру выдавать рекомендации относительно индексов, которые не играют роли для выбранной рабочей нагрузки. Следует проявлять осторожность этой опцией, поскольку, несмотря на то, что индексы могут и не вовлекаться в анализируемую рабочую нагрузку, они существенно сказываются на производительности некоторых других запросов, не затрагиваемых в тестировании.
    После того как мастер закончит анализ, вам представляется несколько возможностей выполнения рекомендаций: выполнить их немедленно, составить расписание их выполнения в будущем, или записать их в SQL-сценарий для последующего выполнения.
    Используйте мастер Index Tuning Wizard для настройки базы данных
  • В базе данных Aromatherapy раскройте папку Indexes таблицы Oils.
    Использование мастера Index Tuning Wizard
    увеличить изображение

  • Выберите индекс Oil_PlantParts и нажмите кнопку Delete (Удалить). Query Analyzer запросит подтверждение об удалении индекса.
    Использование мастера Index Tuning Wizard

  • Нажмите OK. Query Analyzer удалит индекс.
    Использование мастера Index Tuning Wizard
    увеличить изображение

  • Перейдите к окну Query (Запрос) и из меню Query (Запрос) выберите Index Tuning Wizard (Мастер настройки индексов). Query Analyzer отобразит первую страницу мастера настройки индексов Index Tuning Wizard.

    Использование мастера Index Tuning Wizard

  • Нажмите Next (Далее). Мастер отобразит страницу, приглашающую вас выбрать базу данных и режим настройки.

    Использование мастера Index Tuning Wizard

  • Убедитесь, что выбрана база данных Aromatherapy и затем выберите режим настройки Thorough (Полная).

    Использование мастера Index Tuning Wizard

  • Нажмите Next (Далее). Мастер отобразит страницу, приглашающую вас выбрать рабочую нагрузку для анализа.

    Использование мастера Index Tuning Wizard

  • Нажмите кнопку Advanced Options (Дополнительные параметры). Мастер отобразит диалоговое окно с параметрами настройки индексов.

    Использование мастера Index Tuning Wizard

  • Примите установленные по умолчанию значения настройки, нажав OK.
  • Примите установленные по умолчанию значения SQL Query Analyzer Selection, нажав кнопку Next (Далее). Мастер отобразит страницу, приглашающую вас выбрать таблицу для настройки.

    Использование мастера Index Tuning Wizard




  • Клиентская статистика


    Последней утилитой для анализа запросов, предоставляемой окном Query (Запрос) Query Analyzer является панель клиентской статистики Client Statistics Pane, которая отображает выполнение запроса на стороне клиента.
    Информация в панели клиентской статистики Client Statistics Pane делится на три раздела: Application Profile Statistics, в котором содержится информация о количестве выполненных операторов Transact-SQL и выполненных строках; Network Statistics, в котором содержится информация о сформированном трафике сети; Time Statistics, который помогает вам определить где происходит замедление: на клиенте или на сервере.
    Совет. Раздел статистика сети Network Statistics, обеспечиваемая панелью клиентской статистики Client Statistics Pane, будет присутствовать, даже если вы подключены к локальному серверу.
    Отобразите клиентскую статистику
  • Если вы закрыли окно Query (Запрос) после предыдущего упражнения, то снова откройте его и введите в панели редактирования Editor Pane следующий оператор Transact-SQL:
    SELECT PlantParts.PlantPart, Count(Oils.OilName) AS NumberOfOils FROM Oils INNER JOIN PlantParts On Oils.PlantPartID = PlantParts.PlantPartID GROUP BY PlantParts.PlantPart
    Клиентская статистика
    увеличить изображение

  • В окне Query (Запрос) выберите Show Client Statistics (Показать клиентскую статистику).
  • Нажмите кнопку Execute Query (Выполнить запрос)Клиентская статистика в панели инструментов анализатора запросов Query Analyzer, чтобы еще раз выполнить запрос.
  • В окне Query (Запрос) выберите вкладку Statistics (Статистика).
    Клиентская статистика




  • Планы выполнения


    Панель планов выполнения Execution Plan Pane окна Query (Запрос) графически отображает последовательность выполнения вашего запроса SQL Server. На рис. 23.1 представлен план выполнения для простого оператора SELECT:
    SELECT OilName, LatinName FROM Oils ORDER BY LatinName
    Планы выполнения
    увеличить изображение
    Рис. 23.1.  Панель плана выполнения Execution Plan Pane окна Query (Запрос).
    Совет. Информация, отображаемая в панели плана выполнения Execution Plan Pane, идентична тексту, отображаемому опцией SHOWPLAN базы данных, которая хорошо известна пользователям предыдущих версий SQL Server и все еще присутствует в SQL Server 2000. Если оператор SET SHOWPLAN_ALL ON выполняется как часть сценария в окне Query (Запрос), то результаты будут отображаться в панели сетки Grids Pane. Панель Execution Plan Pane отображает информацию в формате, который понятен большинству людей.
    Панель Execution Plan Pane использует довольно большое количество значков для представления операций, которые может выполнить обработчик запросов. Значки описаны в документации SQL Server Books Online, но нет большой необходимости изучать их. Просто наведите курсор мыши на значок и удерживайте некоторое время на нем, после чего отобразится окно подсказки, описывающее не только действие, представляемое значком, но и некоторый объем полезной информации, такой как цена выполнения ввода/вывода I/O, цена загрузки процессора, число строк в операции и итоговая цена операции. Рис. 23.2 показывает окно подсказки для плана выполнения операции кластерного индексного сканирования Clustered Index Scan, представленного на рис. 23.1.
    Планы выполнения
    увеличить изображение
    Рис. 23.2.  Окно подсказки для операции Clustered Index Scan.
    Операции в плане выполнения исполняются слева направо. Окно подсказки для каждой стрелки, соединяющей операции, показывает число строк, выполненных в предыдущей операции и расчетный размер каждой строки, как показано на рис. 23.3.
    Планы выполнения
    увеличить изображение
    Рис. 23.3.  Окно подсказки для соединительных стрелок.
    Помимо отображения операций, которые SQL Server будет исполнять при выполнении определенного запроса, план выполнения также предоставляет механизм для оптимизации запроса. Используя контекстное меню панели плана выполнения Execution Plan Pane, вы можете обновлять статистику, используемую оптимизатором запросов при определении стратегии выполнения, и добавлять индексы для оптимизации производительности.

    Планы выполнения
    увеличить изображение

  • В меню Query (Запрос) выберите Show Execution Plan (Показать план выполнения).


  • Примечание. Во время выполнения запроса панель Execution Plan Pane не отображается.

  • Для выполнения запроса в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Execute Query (Выполнить запрос).Планы выполнения

    Query Analyzer выполнит запрос и отобразит результаты в панели сетки Grids Pane.

    Планы выполнения
    увеличить изображение

  • Выберите вкладку Execution Plan (План выполнения).

    Планы выполнения
    увеличить изображение



  • Добавьте индекс в панели Execution Plan Pane

  • В панели плана выполнения запроса Execution Plan Pane щелкните правой кнопкой мыши на значке, представляющем операцию Clustered Index ScanПланы выполнения. Если в итоге значение для этой операции будет составлять 63%, нам следует по возможности ее оптимизировать.
  • Из контекстного меню выберите Manage Indexes (Управление индексами). Query Analyzer отобразит диалоговое окно Manage Indexes (Управление индексами).

    Планы выполнения

  • Нажмите кнопку New (Создать). Query Analyzer отобразит диалоговое окно Create New Index (Создание нового индекса).

    Планы выполнения

  • Введите в качестве имени индекса Oils_PlantParts и выделите строку PlantPartID для включения ее в индекс.

    Планы выполнения

  • Нажмите OK. Query Analyzer создаст индекс и отобразит его в диалоговом окне Manage Indexes (Управление индексами).

    Планы выполнения

  • Закройте диалоговое окно Manage Indexes (Управление индексами).
  • Нажмите кнопку Execute Query (Выполнить запрос)Планы выполнения в панели инструментов анализатора запросов Query Analyzer, чтобы еще раз выполнить запрос.
  • В окне запроса выберите вкладку Execution Plan (План выполнения). Операция кластерного индексного сканирования Clustered Index Scan для таблицы Oils будет заменена операцией индексного поиска Index Seek, что в итоге приведет к уменьшению значения для этой операции с 63 процентов до 13.

    Планы выполнения
    увеличить изображение




  • Трассировка сервера


    Вторая утилита Query Analyzer предоставляет возможности анализа производительности запроса через трассировку сервера. Панель Trace Pane показывает команды, которые выполняются на сервере во время исполнения запроса. Команды не соответствуют операциям в плане выполнения – ряд команд выполняется дополнительно, а реальные команды Transact-SQL не будут показаны столь же детально.
    Совет. SQL Server 2000 также предоставляет другое средство для выполнения трассировки сервера - SQL Profiler. Утилиту SQL Profiler мы не будем рассматривать в этом курсе.
    Отобразите трассировку сервера
  • Если вы закрыли окно Query (Запрос) после предыдущего упражнения, то снова откройте его и введите в панели редактирования Editor Pane следующий оператор Transact-SQL:
    SELECT PlantParts.PlantPart, Count(Oils.OilName) AS NumberOfOils FROM Oils INNER JOIN PlantParts On Oils.PlantPartID = PlantParts.PlantPartID GROUP BY PlantParts.PlantPart
    Трассировка сервера
    увеличить изображение

  • В меню Query (Запрос) выберите Show Server Trace (Показать трассировку сервера).
  • Для выполнения запроса в панели инструментов анализатора Query Analyzer нажмите кнопку Execute Query (Выполнить запрос).Трассировка сервера
  • В окне Query (Запрос) выберите вкладку Trace (Трассировка).
    Трассировка сервера
    увеличить изображение




  • Арифметические операции


    Transact-SQL предоставляет операции для выполнения основных арифметических действий. Соответствующие операторы показаны в таблице 24.4. Эти операторы в точности выполняют то, что они обозначают. Только один оператор может оказаться для вас незнакомым, это арифметический модуль (modulo), который возвращает целую часть (целое число) остатка от деления. Например, результатом выражения 16 % 3 будет 1, а не 5 1/3.

    Таблица 24.4. Арифметические операторы.ОператорНазначение
    +Сложение.
    -Вычитание.
    *Умножение.
    /Деление.
    %Остаток от деления.
    +Положительное число.
    -Отрицательное число.

    Используйте арифметические операции в операторе SELECT
  • Для открытия нового окна Query (Запрос), в панели инструментов анализатора запросов Query Analyzer нажмите кнопку New Query (Новый запрос).Арифметические операции Query Analyzer откроет пустое окно Query (Запрос).
    Арифметические операции

  • В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Load Script (Загрузить сценарий).Арифметические операции Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла запроса).
    Арифметические операции

  • В корневой директории, в папке SQL 2000 Step by Step выберите файл Arithmetic и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий в окно Query (Запрос).
    Арифметические операции

  • Для выполнения запроса нажмите в панели инструментов анализатора запросов Query Analyzer кнопку Execute Query (Выполнить запрос).Арифметические операции Query Analyzer отобразит результаты в панели сетки Grids Pane.
    Арифметические операции

  • Закройте окно Query(Запрос).



  • Другие операции


    Transact-SQL предоставляет еще две полезных операции, которые описаны в таблице 24.8. В уроке 12 мы уже использовали операцию конкатенации строк +. Операция конкатенации прибавляет содержимое одной строки к другой.
    Операция присвоения =, присваивает значение, стоящее справа от, оператора значению, стоящему слева от оператора. Учтите, что здесь порядок отличается от того, который вы изучали в школе: не "a+b=c", а "c=a+b". Мы будем использовать операцию присвоения далее в этом уроке при изучении переменных.

    Таблица 24.8. Другие операторыОператорЗначение
    +Конкатенация строк.
    =Присвоение.

    Используйте операцию конкатенацию в операторе SELECT
  • Для открытия нового окна Query (Запрос), нажмите в панели инструментов анализатора запросов Query Analyzer кнопку New Query (Новый запрос).Другие операции Query Analyzer откроет пустое окно Query (Запрос).
  • В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Load Script (Загрузить сценарий).Другие операции Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла сценария).
    Другие операции

  • Выберите файл с именем Concatenation и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий в окно Query (Запрос).
    Другие операции

  • Для выполнения запроса в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Execute Query (Выполнить запрос).Другие операции Query Analyzer отобразит результаты в панели сетки Grids Pane.
    Другие операции

  • Закройте окно Query (Запрос).



  • Функции агрегирования


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

    Таблица 24.11. Функции совокупностиФункцияОперация
    AVGВозвращает среднее значение из коллекции, игнорируя нулевые (NULL) значения.
    COUNTВозвращает количество значений в коллекции, включая и нулевые.
    MAXВозвращает наибольшее значение из коллекции.
    MINВозвращает наименьшее значение из коллекции.
    SUMВозвращает сумму значений из коллекции, игнорируя нулевые значения.
    STDEVВозвращает стандартное статистическое отклонение для каждого из значений в коллекции.
    STDEVPВозвращает стандартное статистическое отклонение все совокупности значений в коллекции.
    VARВозвращает статистическую вариацию значений в группе.
    VARPВозвращает статистическую вариацию всех значений в коллекции.

    Используйте функции агрегирования
  • Для открытия нового окна Query (Запрос), в панели инструментов анализатора запросов Query Analyzer нажмите кнопку New Query (Новый запрос).Функции агрегирования Query Analyzer откроет пустое окно Query (Запрос).
  • В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Load Script (Загрузить сценарий).Функции агрегирования Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла запроса).
    Функции агрегирования

  • Выберите файл с именем Aggregate и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий в окно Query (Запрос).
    Функции агрегирования

  • Для выполнения запроса нажмите в панели инструментов анализатора запросов Query Analyzer кнопку Execute Query (Выполнить запрос).Функции агрегирования Query Analyzer отобразит результаты в панели сетки Grids Pane.
    Функции агрегирования

  • Закройте окно Query (Запрос).



  • Функции безопасности


    Функции безопасности, представленные в таблице 24.13, возвращают информацию о привилегиях безопасности, имеющихся для пользователей и ролей.

    Таблица 24.13. Функции безопасностиФункцияПараметрыОперация
    HAS_DBACCESSdatabase_nameПоказывает, имеет ли текущий пользователь доступ к базе данных database_name.
    IS_MEMBERgroup_or_roleПоказывает, имеет ли текущий пользователь членство в группе или роли group_or_role.
    IS_SRVROLEMEMBERrole [, login]Показывает, имеет ли текущая или указанная учетная запись login членство в роли role.
    SUSER_SID[login]Для текущей или указанной учетной записи login возвращает идентификационный номер безопасности (SID).
    SUSER_SNAME[]Возвращает имя учетной записи по ее идентификационному номеру безопасности SID.
    USER_ID[user]Возвращает идентификационный номер текущего или указанного пользователя user.
    USERВозвращает имя текущего пользователя базы данных.

    Используйте функции безопасности
  • Для открытия нового окна Query (Запрос), в панели инструментов анализатора запросов Query Analyzer кнопку нажмите New Query (Новый запрос).Функции безопасности Query Analyzer откроет пустое окно Query (Запрос).
  • В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Load Script (Загрузить сценарий).Функции безопасностиQuery Analyzer отобразит диалоговое окно Open Query File (Открытие файла запроса).
    Функции безопасности

  • Выберите файл с именем Security и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий в окно Query (Запрос).
    Функции безопасности

  • Для выполнения запроса в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Execute Query (Выполнить запрос).Функции безопасности Query Analyzer отобразит результаты в панели сетки Grids Pane.
    Функции безопасности

  • Закройте окно Query (Запрос).



  • Функции даты и времени


    Функции даты и времени принимают в качестве входных значений дату и время и возвращают либо строковые, числовые значения, либо значения в формате даты и времени. (Помните, что в SQL Server, время считается компонентом типа данных datetime). Параметр единицы, фигурирующий во многих функциях, обычно обозначает единицы измерения времени, например такие, как "год" или "минута". В таблице 24.9 представлены функции даты и времени Transact-SQL.

    Таблица 24.9. Функции даты и времени.ФункцияПараметрыОперация
    DATEADDединицы, число, датаРассчитывает новую дату, добавляя к существующей указанное число единиц (дней, месяцев, часов и т.д.).
    DATEDIFFединицы, нач_дата, кон_датаВозвращает количество единиц времени, между двумя указанными датами.
    DATENAMEединицы, датаВозвращает имя указанной единицы времени даты в виде строки.
    DATEPARTединицы, датаВозвращает имя указанной единицы времени даты в виде числа.
    DAYдатаВозвращает день для указанной даты в виде числа.
    GETDATEВозвращает текущее системное время и дату.
    MONTHдатаВозвращает месяц для указанной даты в виде числа.
    YEARдатаВозвращает год для указанной даты в виде числа.

    Используйте функции даты
  • Для открытия нового окна Query (Запрос), нажмите в панели инструментов анализатора запросов Query Analyzer кнопку New Query (Новый запрос).Функции даты и времени Query Analyzer откроет пустое окно Query (Запрос).
  • В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Load Script (Загрузить сценарий).Функции даты и времени Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла сценария).
    Функции даты и времени

  • Выберите файл с именем DateTime и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий в окно Query (Запрос).
    Функции даты и времени

  • Для выполнения запроса в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Execute Query (Выполнить запрос).Функции даты и времени Query Analyzer отобразит результаты в панели сетки Grids Pane.
    Функции даты и времени

  • Закройте окно Query (Запрос).



  • Функции метаданных


    Функции метаданных возвращают информацию о данных, а не сами данные. Имеется очень большое количество функций метаданных. В таблице 24.12 представлен перечень наиболее часто используемых функций метаданных.

    Таблица 24.12. Функции метаданныхФункцияПараметрыОперация
    COL_LENGTHtable, columnВозвращает количество байт столбца column.
    COL_NAMEtableID, columnIdВозвращает имя columnID.
    COLUMNPROPERTYID, column, propertyВозвращает информацию о свойстве property столбца column.
    DATABASEPROPERTYdatabase, propertyВозвращает значение свойства property.
    DB_IDdatabase_nameВозвращает идентификационный номер базы данных Database_name.
    DB_NAMEdatabaseIDВозвращает имя базы данных по идентификатору databaseID.
    INDEX_COLtable, indexID, keyedВозвращает имя индексированного столбца по идентификаторам indexID и keyID.
    INDEXPROPERTYtableID, index, propertyВозвращает информацию о свойстве property индекса index.
    OBJECT_IDobjectВозвращает идентификационный номер объекта object базы данных.
    OBJECT_NAMEobjectIDВозвращает имя объекта по его идентификационному номеру objectID.
    OBJECTPROPERTYID, propertyВозвращает информацию о свойстве property объекта по его идентификационному номеру ID.
    SQL_VARIANT_PROPERTYSQL_variant, propertyВозвращает указанное свойство property варианта Sql_variant.
    TYPEPROPERTYdatatype, propertyВозвращает информацию о свойстве property для типа данных datatype.

    Используйте функции метаданных
  • Для открытия нового окна Query (Запрос), в панели инструментов анализатора запросов Query Analyzer нажмите кнопку New Query (Новый запрос).Функции метаданных Query Analyzer откроет пустое окно Query (Запрос).
  • В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Load Script (Загрузить сценарий).Функции метаданных Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла запроса).
    Функции метаданных

  • Выберите файл с именем Metadata и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий в окно Query (Запрос).
    Функции метаданных

  • Для выполнения запроса в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Execute Query (Выполнить запрос).Функции метаданных Query Analyzer отобразит результаты в панели сетки Grids Pane.
    Функции метаданных

  • Закройте окно Query (Запрос).



  • Команды Transact-SQL


    В основе языка Transact-SQL лежат команды: "стержневые" операторы, описывающие фундаментальные операции, которые может выполнить язык.
    Зарезервированные слова
    Зарезервированное слово – это одно из средств, используемых языком Transact-SQL. Если вы используете зарезервированное слово как идентификатор, например, в качестве имени столбца, вы должны окружить это имя специальными символами, называемыми ограничителями (delimiters). В Microsoft SQL Server ограничительными символами являются [ и ]. Например, если вы используете SELECT в качестве имени столбца, вы должны при ссылке на этот столбец в запросе указать [SELECT], чтобы SQL Server воспринял это как идентификатор. (По возможности старайтесь избегать использования зарезервированных слов в качестве идентификаторов.)
    То, что мы называем командой, в документации SQL Server Books Online обозначается как "зарезервированные ключевые слова" (reserved keywords). Этот термин не очень удачен, поскольку нет большого различия между "зарезервированные ключевые слова" и любым другим зарезервированным словом. По этой причине мы будем использовать термин команда (command), который означает определенный набор зарезервированных ключевых слов, которые представляют действия, выполняемые SQL Server.
    Принимая во внимание сложность приложений, которые могут быть созданы с помощью Transact-SQL, вам будет весьма удивительно узнать, что язык состоит всего из нескольких команд, со многими из которых мы уже познакомились.
    Изучать команды Transact-SQL будет намного проще, если разделить их на группы по типу выполняемых действий, например таких, как манипулирование данными в таблице или представлении, или управление операционным окружением SQL Server.
    Мы уже использовали команды Transact-SQL. Например, вводили их в панели редактирования Editor Pane окна Query (Запрос) анализатора запросов Query Analyzer, а также в панели SQL Pane конструктора запросов Query Designer в Enterprise Manager. Кроме того, мы использовали их косвенно применяя утилиты, которые выполняют команды Transact-SQL "за сценой". Конструктор таблиц Table Designer в Enterprise Manager, например, формирует операторы CREATE и ALTER, основываясь на заданных вами параметрах.
    Общение с SQL Server
    Большинство приложений баз данных используют традиционный язык программирования, такой как Microsoft Visual Basic, для создания интерактивного интерфейса с SQL Server. Используя средства интерфейса, предоставляемые языком, эти приложения представляют данные пользователям в удобной и "дружественной" форме. "За сценой" же они, тем не менее, используют команды Transact-SQL. Как Enterprise Manager, так и анализатор запросов Query Analyzer в SQL Server как раз и являются приложениями для работы с базами данных, которые выполняют эту задачу.
    Когда вы используете обычные языки программирования, язык сам определяет, как исполнить команды. Некоторые окружения, например такие, как Microsoft Access, предоставляют интерактивные программные инструменты, схожие с Enterprise Manager и Query Analyzer. Другие, такие как Visual Basic или Microsoft Visual C++, используют объектную модель типа ADO для взаимодействия с сервером.


    Логические операции


    Как и операции сравнения, логические операции возвращают булевые значения "истина" (TRUE) или "ложь" (FALSE), но их использование ограничивается сравнением булевых значений. В таблице 24.6 представлены три логических оператора, поддерживаемых SQL Server.

    Таблица 24.6. Логические операторы.ОператорЗначение
    ANDTRUE, если оба значения есть TRUE.
    NOTИнвертирует значения булевого оператора.
    ORTRUE, если хотя бы один из операторов есть TRUE.

    Используйте логические операции в операторе SELECT
  • Для открытия нового окна Query (Запрос), нажмите в панели инструментов анализатора запросов Query Analyzer кнопку New Query (Новый запрос).Логические операции Query Analyzer откроет пустое окно Query (Запрос).
  • В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Load Script (Загрузить сценарий).Логические операции Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла сценария).
    Логические операции

  • Выберите файл с именем Logical и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий в окно Query (Запрос).
    Логические операции

  • Для выполнения запроса в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Execute Query (Выполнить запрос).Логические операции Query Analyzer отобразит результаты в панели сетки Grids Pane.
    Логические операции

  • Закройте окно Query (Запрос).



  • Математические функции


    Математические функции, представленные в таблице 24.10, выполняют числовые вычисления.

    Таблица 24.10. Математические функцииФункцияПараметрыОперация
    ABSnumeric_expressionВозвращает абсолютное значение выражения numeric_expression.
    ACOSfloat_expressionВозвращает арккосинус выражения float_expression.
    ASINfloat_expressionВозвращает арксинус выражения float_expression.
    ATANfloat_expressionВозвращает арктангенс выражения float_expression.
    ATN2float_expression, float_expressionВозвращает угол в радианах, тангенс которого находится между двумя значениями float_expression.
    CEILINGnumeric_expressionВозвращает ближайшее число, большее или равное выражению numeric_expression.
    COSfloat_expressionВозвращает тригонометрический косинус выражения float_expression.
    COTfloat_expressionВозвращает тригонометрический котангенс выражения float_expression.
    DEGREESnumeric_expressionДанный угол numeric_expression в радианах возвращает в градусах.
    EXPfloat_expressionВозвращает экспоненциальное значение выражения float_expression.
    FLOORnumeric_expressionВозвращает ближайшее число, меньшее или равное выражению numeric_expression.
    LOGfloat_expressionВозвращает натуральный логарифм выражения float_expression.
    LOG10float_expressionВозвращает десятичный логарифм выражения float_expression.
    PIВозвращает значение константы pi.
    POWERnumeric_expression, yВозвращает значение выражения numeric_expression, возведенное в степень y.
    RADIANSnumeric_expressionДанный угол numeric_expression в градусах возвращает угол в радианах.
    RAND[seed]Возвращает случайное значение в интервале от 0 до 1.
    ROUNDnumeric_expression, lenghtВозвращает округленное с указанной точностью значение выражения numeric_expression.
    SIGNfloat_expressionВозвращает +1, если numeric_expression положительно, 0 если numeric_expression ноль, и -1 если numeric_expression отрицательно.
    SINfloat_expressionВозвращает тригонометрический синус даваемого в радианах угла float_expression.
    SQUAREfloat_expressionВозвращает квадрат float_expression.
    SQRTfloat_expressionВозвращает квадратный корень из float_expression.
    TANfloat_expressionВозвращает тангенс выражения float_expression.


    Используйте математические функции

  • Для открытия нового окна Query (Запрос), нажмите в панели инструментов анализатора запросов Query Analyzer кнопку New Query (Новый запрос).Математические функции Query Analyzer откроет пустое окно Query (Запрос).
  • В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Load Script (Загрузить сценарий).Математические функции Query Analyzer отобразит диалоговое окно Open Query File (Открыть файл запроса).

    Математические функции

  • Выберите файл с именем Mathematical и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий в окно Query (Запрос).

    Математические функции

  • Для выполнения запроса в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Execute Query (Выполнить запрос).Математические функции Query Analyzer отобразит результаты в панели сетки Grids Pane.

    Математические функции

  • Закройте окно Query (Запрос).



  • Операции сравнения


    В уроке 13 мы уже рассматривали использование операций сравнения при конструировании фразы WHERE. Соответствующие операторы отображены в таблице 24.5. Операторы сравнения возвращает булевые значения "истина" (TRUE) или "ложь" (FALSE).

    Таблица 24.5. Операторы сравнения.ОператорЗначение
    =Равно
    >Больше
    <Меньше
    >=Больше или равно
    <=Меньше или равно
    <>Не равно

    Используйте операции сравнения в фразе CLAUSE
  • Для открытия нового окна Query (Запрос), нажмите в панели инструментов анализатора запросов Query Analyzer кнопку New Query (Новый запрос).Операции сравнения Query Analyzer откроет пустое окно Query (Запрос).
  • В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Load Script (Загрузить сценарий).Операции сравнения Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла сценария).
    Операции сравнения

  • Выберите файл с именем Comparison и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий в окно Query (Зарос).
    Операции сравнения

  • Для выполнения запроса нажмите в панели инструментов анализатора запросов Query Analyzer кнопку Execute Query (Выполнить запрос).Операции сравнения Query Analyzer отобразит результаты в панели сетки Grids Pane.
    Операции сравнения

  • Закройте окно Query (Зарос).



  • Побитные операции


    Выполнение побитных операций очень схоже с выполнением логических операций, но в то время как логические операции возвращают результаты, основанные на булевых значениях, побитные операции работают на битовом уровне с числовыми значениями. Побитные операции представлены в таблице 24.7.
    Побитные операторы $ и | работают так же, как и их логические собратья, за исключением того, что они сравнивают каждый бит двух значений, а не два значения целиком.
    Оператор ^ не имеет соответствующего логического эквивалента. В булевой алгебре, булевое OR (ИЛИ) возвращает TRUE (истина), если хотя бы одно или оба значения есть TRUE (истина). Однако булевое исключающее OR (ИЛИ) возвращает TRUE(истина), если одно, но не оба сравниваемых значения есть TRUE (истина). То же самое делает и оператор ^, который возвращает TRUE(истина), только если одно, но не оба сравниваемых бита есть TRUE (истина).

    Таблица 24.7. Побитные операторы.ОператорЗначение
    &Побитное AND (И).
    |Побитное OR (ИЛИ).
    ^Побитное исключающее OR (ИЛИ).
    ~Побитное NOT.

    Битовое представление
    Побитные операции выполняются над целочисленными значениями, использующими каждый бит в числе для указания отдельного свойства или атрибута – эта техника названа битовом представлением (bit packing). По определению, если одно целочисленное число используется для хранения множества свойств, значение не является скалярным и таблица не будет соответствовать нормальной форме.
    При данных обстоятельствах вы должны избегать использования битового представления в соответствующей базе данных. Однако битовое представление будет незаменимо при использовании наследуемых данных, и побитные операции будут в данной ситуации весьма удобны.
    Используйте побитные операции в операторе SELECT
  • Для открытия нового окна Query (Запрос), нажмите в панели инструментов анализатора запросов Query Analyzer кнопку New Query (Новый запрос).Побитные операции Query Analyzer откроет пустое окно Query (Запрос).
  • В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Load Script (Загрузить сценарий).Побитные операции Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла запроса).
    Побитные операции

  • Выберите файл с именем Bitwise и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий в окно Query (Запрос).
    Побитные операции

  • Для выполнения запроса в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Execute Query (Выполнить запрос).Побитные операции Query Analyzer отобразит результаты в панели сетки Grids Pane.
    Побитные операции

  • Закройте окно Query (Запрос).



  • Системные функции


    Системные функции возвращают информацию об окружении SQL Server. Так же, как и функций метаданных, системных функций очень много и все они доступны через панель Object Browser. В таблице 24.15 представлены основные системные функции.

    Таблица 24.15. Системные функцииФункцияПараметрыОперации
    APP_NAMEВозвращает имя приложения.
    DATALENGHTвыражениеВозвращает количество байт, используемых для хранения выражения.
    ISDATEвыражениеОпределяет, корректно ли данное выражение.
    ISNULLвыражениеОпределяет, является ли данное выражение нулем.
    ISNUMERICвыражениеОпределяет, является ли данное выражение числом.
    NEWIDСоздает новый уникальный идентификационный номер uniqueidentifier.
    NULLIFвыражение, выражениеВозвращает NULL, если первое и второе выражение одинаковы.
    PARSENAMEobject_name, name_partВозвращает часть имени name_part объекта object_name.
    SYSTEM_USERВозвращает текущее имя пользователя системы.
    USER_NAME[id]Возвращает имя текущего пользователя или пользователя по указанному id.

    Используйте системные функции
  • Для открытия нового окна Query (Запрос), в панели инструментов анализатора запросов Query Analyzer нажмите кнопку New Query (Новый запрос).Системные функции Query Analyzer откроет пустое окно Query (Запрос).
  • В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Load Script (Загрузить запрос). Системные функции Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла запроса).
    Системные функции

  • Выберите файл с именем System и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий в окно Query (Запрос).
    Системные функции

  • Для выполнения запроса нажмите в панели инструментов анализатора запросов Query Analyzer кнопку Execute Query (Выполнить запрос).Системные функции Query Analyzer отобразит результаты в панели сетки Grids Pane.
    Системные функции

  • Закройте окно Query (Запрос).



  • Строковые функции


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

    Таблица 24.14. Строковые функцииФункцияПараметрыОперация
    ASCIIchar_expressionВозвращает ASCII-код самого левого символа в строке char_expression.
    CHARinteger_expressionВозвращает ASCII-символ, код которого равен integer_expression.
    CHARINDEXchar_expression, char_expression [, start_position]Возвращает позицию первого выражения char_expression во втором выражении char_expression.
    LEFTchar_expression, integer_expressionВозвращает крайние слева символы integer_expression в выражении char_expression.
    LENchar_expressionВозвращает количество символов в выражении char_expression.
    LOWERchar_expressionВозвращает выражение char_expression, в котором все символы приведены к нижнему регистру.
    LTRIMchar_expressionВозвращает выражение char_expression с удаленными начальными пробелами.
    NCHARinteger_expressionВозвращает символ UNICODE, код которого задает integer_expression.
    REPLACEchar_expression, char_expression, char_expressionНаходит все вхождения второй строки char_expression в первую char_expression и заменяет их на третью char_expression.
    RIGHTchar_expression, integer_expressionВозвращает крайние справа символы integer_expression в строке char_expression.
    RTRIMchar_expressionВозвращает строку char_expression с удаленными конечными пробелами.
    SOUNDEXchar_expressionВозвращает четырехзначный код SOUNDEX для char_expression.
    SPACEinteger_expressionВозвращает число integer_expression пробелов.
    SUBSTRINGchar_expression start, lenghtВозвращает подстроку char_expression указанной длины lenght, начиная с символа start.
    UNICODEunicode_expressionВозвращает значение UNICODE для первого символа в unicode_expression.
    UPPERchar_expressionВозвращает выражение char_expression, в котором все символы приведены к верхнему регистру.

    Используйте строковые функции
  • Для открытия нового окна Query (Запрос), в панели инструментов анализатора запросов Query Analyzer нажмите кнопку New Query (Новый запрос).Строковые функции Query Analyzer откроет пустое окно Query (Запрос).
  • В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Load Script (Загрузить сценарий).Строковые функции Query Analyzer отобразит диалоговое окно Open Query File (Открыие файла запроса).
    Строковые функции

  • Выберите файл с именем String и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий в окно Query (Запрос).
    Строковые функции

  • Для выполнения запроса в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Execute Query (Выполнить запрос).Строковые функции Query Analyzer отобразит результаты в панели сетки Grids Pane.
    Строковые функции
    увеличить изображение

  • Закройте окно Query (Запрос).



  • Глобальные переменные


    Глобальные переменные обозначаются двойным символом @ (@@VERSION) и предоставляются программой SQL Server. Они не могут создаваться пользователем. Большинство глобальных переменных предоставляет информацию о текущем статусе SQL Server. Они все представлены в панели Object Browser в папке Common Functions.
    Переменные конфигурирования
    Наиболее часто используемые переменные конфигурирования приведены в таблице 25.1. Они предоставляют информацию о текущих установках различных свойств и параметров SQL Server.

    Таблица 25.1. Переменные конфигурированияПеременнаяЗначение
    @@CONNECTIONSЧисло соединений или попыток соединения с момента последнего запуска сервера.
    @@DATEFIRSTВозвращает число, обозначающее день недели (Monday=1, Sunday=7).
    @@DBTSПоследнее значение колонки с отметкой времени, вставленной в базу данных.
    @@LANGIDИдентификатор локального языка, использующегося в данный момент.
    @@LANGUAGEНазвание текущего языка.
    @@OPTIONSВозвращает значение текущей опции SET.
    @@SERVERNAMEИмя локального сервера.
    @@VERSIONДата, версия и тип процессора текущей инсталляции.

    Статистические переменные
    Статистические переменные предоставляют информацию о процессах, выполненных SQL Server с момента последнего запуска. Основные переменные показаны в таблице 25.2.

    Таблица 25.2. Статические переменныеПеременнаяЗначение
    @@CPU_BUSYВремя, потраченное процессором на работу с момента последнего запуска сервера.
    @@IDLEВремя, бездействия SQL Server с момента последнего запуска сервера.
    @@IO_BUSYВремя, которое потратил SQL Server на выполнение операций ввода и вывода с момента последнего запуска сервера.
    @@TOTAL_ERRORSЧисло ошибок чтения/записи диска с момента последнего запуска сервера.
    @@TOTAL_READЧисло выполненных сервером операций чтения с диска с момента последнего запуска сервера.
    @@TOTAL_WRITEЧисло выполненных сервером операций записи на диск с момента последнего запуска сервера.

    Системные переменные
    Системные переменные показаны в таблице 25.3. Они предоставляют информацию о последних операциях с таблицами, выполненных сервером.

    Таблица 25.3. Системные переменныеПеременнаяЗначение
    @@IDENTITYПоследнее значение идентификационной колонки, вставленной в базу данных.
    @@ROWCOUNTКоличество строк, подвергшихся воздействию последнего оператора.



    Использование переменных


    Переменные могут использоваться во всех выражениях языка Transact-SQL. Однако, они не используются вместо имени объекта или ключевого слова. Таким образом, представленные ниже операторы будут корректными:
    DECLARE @theOil char(20) SET @theOil = 'Basil'
    -- Эта команда будет выполнена SELECT OilName, Description FROM Oils WHERE OilName = @theOil Однако оба следующих оператора SELECT не будут выполнены: DECLARE @theCommand char(10), @theField char(10) SET @theCommand = 'SELECT' SET @theField = 'OilName'
    -- Эта команда не будет выполнена @theCommand * FROM Oils
    -- Как и эта SELECT @theField from Oils
    Объявите локальную переменную
  • В панели инструментов анализатора запросов Query Analyzer нажмите кнопку New Query (Новый запрос).Использование переменных Query Analyzer откроет новое окно Query (Запрос).
  • В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Load Script (Загрузить сценарий).Использование переменныхQuery Analyzer отобразит диалоговое окно Open Query File (Открытие файла запроса).
    Использование переменных

  • Выберите сценарий CreateLocalVariable и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий в окно Query (Запрос).
    Использование переменных

  • В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Execute Query (Выполнить сценарий). Использование переменных Query Analyzer выполнит сценарий и отобразит результат.
    Использование переменных


  • Используйте оператор SELECT для присвоения значений
  • В окне запроса выберите панель редактирования Editor Pane или откройте новое окно Query (Запрос), если вы закрыли окно, использовавшееся в предыдущем упражнении.Использование переменных
  • В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Load Script (Загрузить сценарий).Использование переменных Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла запроса).
    Использование переменных

  • Выберите сценарий SelectVariable и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий в окно Query (Запрос).
    Использование переменных

  • В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Execute Query (Выполнить сценарий).Использование переменных Query Analyzer выполнит сценарий и отобразит результат.
    Использование переменных



  • Использование переменных

  • Выберите сценарий UseTableVariable и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий в окно Query (Запрос).

    Использование переменных

  • В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Execute Query (Выполнить запрос). Использование переменных Query Analyzer выполнит сценарий и отобразит результат.

    Использование переменных



  • Используйте глобальные переменные для отображения информации о сервере

  • В окне запроса выберите панель редактирования Editor Pane или откройте новое окно Query (Запрос), если вы закрыли окно, использовавшееся в предыдущем упражнении.Использование переменных
  • В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Load Script (Загрузить сценарий).Использование переменных Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла запроса).

    Использование переменных

  • Выберите сценарий GlobalVariable и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий в окно Query (Запрос).

    Использование переменных

  • В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Execute Query (Выполнить запрос).Использование переменныхQuery Analyzer выполнит сценарий и отобразит результат.

    Использование переменных




  • Использование временных таблиц


    Временные таблицы создаются с помощью таких же команд, как и обычные таблицы: CREATE или SELECT INTO. Предоставляемая таблица является доступной для соединения (т. е., она не считается локальной таблицей, созданной другим соединением), и она может использоваться точно так же, как и обычная таблица.
    Создайте локальную временную таблицу
  • В панели инструментов анализатора запросов Query Analyzer нажмите кнопку New Query (Новый запрос) для открытия нового окна Query (Запрос).Использование временных таблиц
  • В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Load Script (Загрузить сценарий).Использование временных таблицQuery Analyzer отобразит диалоговое окно Open Query File (Открытие файла запроса).
    Использование временных таблиц

  • Выберите сценарий CreateLocal и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий.
    Использование временных таблиц

  • В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Execute Query (Выполнить запрос).Использование временных таблиц Query Analyzer создаст временную таблицу.
  • В панели Object Browser выберите папку User Tables в базе данных tempdb.
    Использование временных таблиц
    увеличить изображение

  • Нажмите клавишу F5 для обновления содержимого окна Object Browser и откройте папку User Tables. Query Analyzer отобразит в списке таблицу dbo.#LocalTable.
    Использование временных таблиц
    увеличить изображение



  • Использование временных таблиц
    увеличить изображение



    Используйте локальную временную таблицу из текущего сеанса

  • Выберите окно Query (Запрос), содержащее сценарий CreateLocal.

    Использование временных таблиц

  • В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Load Script (Загрузить сценарий).Использование временных таблиц Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла запроса).

    Использование временных таблиц

  • Выберите сценарий UseLocal и нажмите кнопку Open (Открыть). Query Analyzer откроет сценарий.

    Использование временных таблиц

  • В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Execute Query (Выполнить сценарий).Использование временных таблиц Query Analyzer выполнит оператор SELECT.

    Использование временных таблиц



  • Используйте глобальную временную таблицу из текущего сеанса

  • Выберите окно Query (Запрос), содержащее сценарий CreateGlobal.

    Использование временных таблиц

  • В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Load Script (Загрузить сценарий).Использование временных таблиц Query Analyzer отобразит диалоговое окно Open Query File (Открытие файл сценария).

    Использование временных таблиц

  • Выберите сценарий UseGlobal и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий.

    Использование временных таблиц

  • В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Execute Query (Выполнить сценарий).Использование временных таблиц Query Analyzer выполнит оператор SELECT.

    Использование временных таблиц



  • Используйте локальную временную таблицу из другого сеанса

  • В панели инструментов анализатора запросов Query Analyzer нажмите кнопку New Query (Новый запрос).Использование временных таблиц Query Analyzer откроет новое окно Query (Запрос).
  • В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Load Script (Загрузить сценарий).Использование временных таблиц Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла запроса).

    Использование временных таблиц

  • Выберите сценарий UseLocal и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий в окно Query (Запрос).

    Использование временных таблиц

  • В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Execute Query (Выполнить сценарий).Использование временных таблиц Поскольку локальная временная таблица не доступна в новом сеансе запроса, анализатор запросов Query Analyzer отобразит сообщение об ошибке.

    Использование временных таблиц



  • Используйте глобальную временную таблицу из другого сеанса

  • В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Load Script (Загрузить сценарий).Использование временных таблиц Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла запроса).

    Использование временных таблиц

  • Выберите сценарий UseGlobal и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий в окно Query (Запрос).

    Использование временных таблиц

  • В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Execute Query (Выполнить запрос).Использование временных таблиц Поскольку глобальная временная таблица доступна в новом сеансе запроса, анализатор запросов Query Analyzer отобразит результат.

    Использование временных таблиц

  • Закройте два открытых окна запроса Query, но одно оставьте открытым для сохранения соединения с сервером. Если будет предложено сохранить изменения, нажмите No (Нет).



  • Понятие о переменных


    Переменные обозначаются префиксом @; например @MyVariable. Как и временные таблицы, переменные имеют две области действия: локальную и глобальную. Глобальные переменные обозначаются двойным символом @: @@VERSION.
    Имеется несколько различий между переменными и временными таблицами. Все глобальные переменные определяются SQL Server; вы не можете определить их самостоятельно. Кроме того, область действия локальных переменных еще уже, чем у локальных таблиц: они доступны только в пределах пакета или процедуры, в которой они объявлены.
    Локальные переменные
    Локальные переменные создаются с помощью оператора DECLARE, который имеет следующий синтаксис:
    DECLARE @локальная_переменная тип_данных
    Идентификатор локальная_переменная должен соответствовать обычным правилам, действующим для идентификаторов базы данных; тип_данных может быть любым системным типом данных, исключая text, ntext или image. С помощью одного оператора DECLARE может быть создано несколько локальных переменных. Для этого переменные нужно указывать через запятую:
    DECLARE @var1 int, @var2 int
    Большинство типов данных являются скалярными (scalar); то есть они содержат одно значение, такое как число или строка. Возможность объявления перемененных с табличным типом данных, является новшеством в SQL Server 2000. Синтаксис для создания переменной табличного типа показан ниже:
    DECLARE @локкальная_переменная Table ({определение_таблицы})
    В этом примере, определение_таблицы идентично обычному определению CREATE TABLE, за исключением того, что разрешается использование лишь следующих ограничений: PRIMARY KEY, UNIQUE KEY, NULL и CHECK.
    Совет. Другим полезным типом данных для переменных является sql_variant. Переменные типа варианты могут содержать любой тип данных. Это позволяет вам назначать различные типы данных одной локальной переменной в ходе выполнения процедуры.
    После создания, локальная переменная первоначально имеет значение NULL. Вы можете присвоить переменной значение следующими способами:
  • использовать команду SET с указанием константы или переменной:
    SET @myCharVariable = 'Hello, World'
  • использовать команду SELECT с указанием константы или переменной:
    SELECT @myCharVariable = 'Hello, World'
  • использовать команду SELECT с указанием другого оператора SELECT:
    SELECT @myCharVariable = MAX (OilName) FROM Oils
  • использовать команду INSERT INTO с указанием переменной табличного типа:
    INSERT INTO @myTableVariable SELECT * FROM Oils

  • Обратите внимание, что в третьем случае (SELECT с другим SELECT) оператор присвоения (=) замещает второе ключевое слово в SELECT; оно второй раз не повторяется. Последний пример демонстрирует синтаксис INSERT INTO...SELECT команды INSERT INTO. Вы также можете использовать синтаксис INSERT INTO...VALUES:
    INSERT INTO @myTableVariable VALUES ('The Value')


    CASE


    В большинстве языков программирования оператор CASE является расширенной формой оператора IF, которая позволяет вам определять множество булевых выражений в одном операторе. В SQL Server CASE является функцией, а не командой. Она используется не сама по себе, как IF. а как часть оператора SELECT или UPDATE.
    Операторы, включающие в себя структуру CASE, могут использовать одну из двух синтаксических форм, в зависимости от того, будет ли изменяться оцениваемое выражение. Простейшая форма в предположении, что всегда будет оцениваться булево выражение, имеет следующий вид:
    значение = выражение
    Значение может быть сколь угодно сложным. Вы можете использовать константу, имя столбца, или составное выражение, если необходимо. В качестве оператора сравнения всегда используется равенство. Синтаксис простой структуры CASE представлен ниже:
    CASE значение WHEN выражение_один THEN результирующее_выражение_один WHEN выражение_два THEN результирующее_выражение_два . . . WHEN выражение_n THEN результирующее_выражение_n [ELSE альтернативное_результирующее_выражение] END
    В этой форме функции CASE, выражение результирующее_выражение возвращается, только в том случае, если выражение, следующее за ключевым словом WHEN, логически равно указанному значению. Вы можете использовать в выражение любое количество фраз WHEN. Фраза ELSE необязательна – она выполняется, только если все фразы WHEN оцениваются как FALSE.
    Сравнение одного значения с некоторым количеством других значений является типичной задачей, но иногда вам требуется большая степень гибкости. В это случае вы можете воспользоваться так называемым поисковым синтаксисом функции CASE Transact-SQL, который имеет следующий вид:
    CASE WHEN булево_выражение_один THEN результирующее_выражение_один WHEN булево_выражение_два THEN результирующее_выражение_два . . . WHEN булево_выражение_n THEN результирующее_выражение_n [ELSE альтернативное_результирующее_выражение] END
    В этой форме CASE вы можете указать целое булево выражение в каждой фразе WHEN вместо неявного сравнения выражения в простой форме. Учтите, что при определении истинности можно оценивать несколько булевых_выражений. Transact-SQL возвратит только первое результирующее_выражение, а затем перейдет к оператору, следующему за END.
    Используйте простую структуру CASE
  • В окне Query (Запрос) выберите вкладку Editor (Редактор), а затем нажмите кнопку Clear Window (Очистить окно).CASE Query Analyzer очистит окно.
  • В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Load Script (Загрузить сценарий).CASE Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла сценария).
    CASE

  • Выделите сценарий с именем SimpleCase и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий.
    CASE

  • В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Execute Query (Выполнить сценарий).CASE Query Analyzer отобразит результат выполнения запроса.
    CASE



  • CASE

  • Выделите сценарий с именем SimpleCase и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий.

    CASE

  • В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Execute Query (Выполнить сценарий).CASE Query Analyzer отобразит результат выполнения запроса.

    CASE



  • Используйте поисковую форму структуры CASE

  • В окне Query (Запрос) выберите вкладку Editor (Редактор), а затем нажмите кнопку Clear Window (Очистить окно).CASE Query Analyzer очистит окно.
  • В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Load Script (Загрузить сценарий).CASE Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла запроса).

    CASE

  • Выделите сценарий с именем SimpleCase и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий.

    CASE

  • В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Execute Query (Выполнить запрос).CASE Query Analyzer отобразит результат выполнения запроса. Обратите внимание, что хотя третья запись, содержащая в качестве значения поля OilName 'Bergamot', отвечает условию для второй фразы WHEN (LEFT(LatinName,1) = 'C'), она возвращает в качестве значения поля TestResults 'Name B', поскольку она отвечает и первому булевому выражению.

    CASE




  • IF...ELSE


    Оператор IF, является простейшим из набора команд управления ходом выполнения. Если булево выражение, следующее за командой IF, имеет значение TRUE, то будет выполнен оператор или блок операторов, следующий за этим. Если булево выражение имеет значение FALSE, то оператор или блок операторов, следующий за этим, будет пропущен.
    Необязательная команда ELSE позволяет вам задавать оператор или блок операторов, который будет выполняться, только если булево выражение имеет значение FALSE. Например, команды Transact-SQL, представляемые ниже, возвращают 'Истина', если @test имеет значение "истина", и 'Ложь', если нет.
    IF @test SELECT 'Истина' ELSE SELECT 'Ложь'
    Совет. Операторы IF...ELSE могут быть вложены один в другой, образуя логическую структуру, схожую с конструкцией IF...ELSEIF...ELSE, принятой в других языках программирования. Однако следует остерегаться использовать этот прием в простых случаях. Тот же эффект можно достичь путем использования оператора CASE, который мы рассмотрим далее. При этом оценить ход выполнения будет легче.
    Используйте структуру IF...ELSE для управления выполнением
  • В панели инструментов анализатора запросов Query Analyzer нажмите кнопку New Query (Новый запрос) для открытия нового окна Query (Запрос).IF...ELSE
  • В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Load Script (Загрузить сценарий).IF...ELSE
    Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла запроса).
    IF...ELSE

  • В корневой директории найдите папку SQL 2000 Step by Step, выберите сценарий с именем CreateLocal и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий.
    IF...ELSE


  • Совет. Этот сценарий использует команду PRINT для отображения сообщений на вкладке Messages (Сообщения) окна запроса Query. Команда PRINT полезна, когда вы впервые разрабатываете сценарий, в реальных же приложениях вы редко будете ее использовать.
  • В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Execute Query (Выполнить сценарий).IF...ELSE Query Analyzer выполнит запрос и отобразит панель сетки Grids Pane.
    IF...ELSE

  • Выберите вкладку Messages (Сообщения). Query Analyzer отобразит результат выполнения оператора IF...ELSE.
    IF...ELSE




  • Команда GOTO


    Структуры IF...ELSE и CASE управляют порядком выполнения операторов, основываясь на результатах вычисления булевого выражения. Команда GOTO является безусловной. Она передает выполнение непосредственно к оператору, следующему после метки, которая на него указывает.
    В SQL Server метки являются неисполняемыми операторами, имеющими следующий синтаксис:
    имя_метки:
    Имя метки должно удовлетворять правилам, принятым для идентификаторов. Сама команда GOTO имеет очень простой синтаксис:
    GOTO имя_метки
    Код "спагетти"
    GOTO является весьма непопулярной в кругу программистов командой. По большому счету это связано с историческими причинами: ранние языки предоставляли очень мало механизмов управления ходом выполнения – обычно только структуру IF и команду GOTO. Как следствие, создаваемый код оказывался очень сложным для восприятия и анализа. Подобный код получил название "спагетти".
    Применение команды GOTO, тем не менее, бывает вполне оправданным, особенно при обработке ошибок. Если вы будете аккуратно использовать эту команду, она даже сможет сделать код проще для понимания. Следует всего лишь следить, что вы использовали команду GOTO для выполнения задач, которые могут быть более просто выражены через другие команды или функции передачи управления.
    Используйте команду GOTO для безусловного перехода
  • В окне Query (Запрос) выберите вкладку Editor (Редактор), а затем нажмите кнопку Clear Window (Очистить окно).Команда GOTO Query Analyzer очистит окно.
  • В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Load Script (Загрузить сценарий).Команда GOTO Query Analyzer отобразит диалоговое окно Open Query File (Открыть файл запроса).
    Команда GOTO

  • Выделите сценарий с именем GOTO и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий.
    Команда GOTO

  • В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Execute Query (Выполнить запрос).Команда GOTO Query Analyzer отобразит результат запроса.
    Команда GOTO




  • Простой цикл WHILE


    Простейшая форма цикла WHILE содержит булево выражение и оператор или блок операторов. Операторы будут повторяться, пока булево выражение не примет FALSE. Если при первой оценке булево выражение имеет значение FALSE, то оператор или блок операторов не будет выполняться вообще.
    Используйте простой цикл WHILE
  • В окне Query (Запрос) выберите вкладку Editor (Редактор), а затем нажмите кнопку Clear Window (Очистить окно).Простой цикл WHILEQuery Analyzer очистит окно.
  • В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Load Script (Загрузить сценарий).Простой цикл WHILEQuery Analyzer отобразит диалоговое окно Open Query File (Открытие файла запроса).
    Простой цикл WHILE

  • Выделите сценарий с именем WHILE и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий.
    Простой цикл WHILE

  • В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Execute Query (Выполнить запрос).Простой цикл WHILE Query Analyzer отобразит результат запроса.
    Простой цикл WHILE




  • Сложные циклы WHILE


    Синтаксис оператора WHILE также позволяет вам осуществлять и более сложную логику выполнения, в отличие от простой логики в предыдущем примере. Фраза BREAK вызывает выход из цикла; выполнение продолжается с оператора, следующего за фразой END блока оператора структуры WHILE. Фраза CONTINUE возвращает выполнение на начало цикла, при этом операторы, следующие за CONTINUE в пределах блока операторов, будут пропущены. Оба оператора, BREAK и CONTINUE, обычно выполняются как условные в пределах оператора IF.
    Если вам потребуется, вы можете использовать команды BREAK и CONTINUE в одном и том же операторе WHILE. Вы также можете использовать каждую команду несколько раз внутри блока операторов, хотя при этом будет исполняться только одна задача.
    Используйте структуру WHILE...BREAK
  • В окне Query (Запрос) выберите вкладку Editor (Редактирование), а затем нажмите кнопку Clear Window (Очистить окно).Сложные циклы WHILE Query Analyzer очистит окно.
  • В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Load Script (Загрузить сценарий).Сложные циклы WHILE Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла сценария).
    Сложные циклы WHILE

  • Выделите сценарий с именем WHILEBREAK и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий.
    Сложные циклы WHILE

  • В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Execute Query (Выполнить запрос).Сложные циклы WHILE Query Analyzer отобразит результат выполнения запроса.
    Сложные циклы WHILE




  • Манипулирование строками с помощью курсора


    Курсоры сами по себе не вызвали бы никакого интереса, если бы вы не могли осуществлять с их помощью определенные действия. Transact-SQL поддерживает три различные команды для работы с курсорами: FETCH, UPDATE и DELETE.
    Команда FETCH извлекает указанную строку из множества строк курсора. В своем простейшем варианте команда FETCH имеет следующий синтаксис:
    FETCH курсор_или_переменная
    В этом формате записи возвращается строка в позиции курсора (текущая строка).
    Используйте простую команду FETCH
  • Нажмите кнопку New Query (Новый запрос) в панели инструментов анализатора запросов Query Analyzer.Манипулирование строками с помощью курсораQuery Analyzer откроет новое окно Query (Запрос).
  • Нажмите кнопку Load Script (Загрузить сценарий) в панели инструментов анализатора запросов Query Analyzer.Манипулирование строками с помощью курсораQuery Analyzer отобразит диалоговое окно Open Query File (Открытие файла запроса).
    Манипулирование строками с помощью курсора

  • Перейдите к папке SQL 2000 Step by Step в корневой директории, выделите сценарий с именем SimpleCursor и нажмите кнопку Open (Открыть).
  • Query Analyzer загрузит сценарий в окно Query (Запрос).
    Манипулирование строками с помощью курсора

  • Нажмите кнопку Execute Query (Выполнить запрос) в панели инструментов анализатора запросов Query Analyzer.Манипулирование строками с помощью курсораQuery Analyzer выполнит запрос.
    Манипулирование строками с помощью курсора


  • Совет. Возможно, вы обратили внимание, что этот сценарий выполняется дольше, чем соответствующий оператор SELECT. Дело в том, что создание и открытие курсора требует дополнительного времени. Никогда не используйте курсор, если для выполнения задачи достаточно оператора SELECT.
    Команда FETCH может не только возвращать строку непосредственно, но и позволяет сохранять значения из возвращенного столбца в переменных. Чтобы сохранить результаты выполнения команды FETCH в переменной, используйте следующий синтаксис:
    FETCH курсор_или_переменная INTO список_переменных
    Список_переменных есть перечень разделяемых запятыми идентификаторов переменных. Перед выполнением команды FETCH вы должны объявить переменные. Список_переменных должен содержать переменную для каждого столбца, фигурирующего в операторе SELECT, который определяет курсор. Тип данных переменной должен либо совпадать, либо быть совместимым с типом данных столбца.


    Модификация и удаление строк через курсоры


    Если ваш курсор является модифицируемым. Изменение исходных значений во множестве курсора выполняется достаточно просто. Предусмотрена специальная форма фразы WHERE, которая поддерживает модификацию через курсор:
    UPDATE таблица_или_представление SET список_для_модификации WHERE CURRENT OF курсор_или_переменная
    Это называется позиционным обновлением. Transact-SQL также поддерживает позиционное удаление, которое имеет следующую форму записи:
    DELETE таблица_или_представление WHERE CURRENT OF курсор_или_переменная
    Выполните позиционное обновление
  • Нажмите кнопку Load Script (Загрузить сценарий)Модификация и удаление строк через курсоры в панели инструмента анализатора запросов Query Analyzer. Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла запроса).
    Модификация и удаление строк через курсоры

  • Выделите сценарий с именем PositionedUpdate и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий в окно Query (Запрос).
    Модификация и удаление строк через курсоры

  • Нажмите кнопку Execute Query (Выполнить запрос)Модификация и удаление строк через курсоры в панели инструментов анализатора запросов Query Analyzer. Query Analyzer выполнит запрос. Обратите внимание, что отображаются две панели сетки. Первая создается оператором FETCH и содержит начальное содержимое столбцов. Вторая является результатом выполнения оператора SELECT и содержит значение поля Description после модификации.
    Модификация и удаление строк через курсоры




  • Мониторинг курсоров Transact-SQL


    Transact-SQL предоставляет две глобальные переменные и функцию, которые помогают вам контролировать работу и состояние вашего курсора. Переменная @@CURSOR_ROWS возвращает количество строк во множестве последнего курсора, открытого в соединении. Значения, возвращаемые @@CURSOR_ROWS, представлены в таблице 27.1.

    Таблица 27.1. Значения, возвращаемые переменной @@CURSOR_ROWS.Возвращаемое значениеОписание
    -mКурсор заполнен записями не полностью; множество курсора на данный момент содержит m строк.
    -1Курсор является динамическим, и количество строк может варьироваться.
    0Курсор либо не открыт, а последний открытый курсор был закрыт и освобожден, либо курсор содержит нуль строк.
    nКоличество строк в курсоре равно n.

    Переменная @@FETCH_STATUS возвращает информацию о выполнении последней команды FETCH. В таблице 27.2 представлены значения, возвращаемые переменной @@FETCH_STATUS.

    Таблица 27.2. Значения, возвращаемые переменной @@FETCH_STATUS.Возвращаемое значениеОписание
    0Оператор FETCH был выполнен успешно.
    -1Оператор FETCH был выполнен неудачно.
    -2Извлекаемая строка отсутствует.

    Наконец, Transact-SQL предоставляет функцию CURSOR_STATUS. Эта функция имеет следующий синтаксис:
    CURSOR_STATUS(тип, курсор_или_переменная)
    Тип может иметь значения 'local', 'global' или 'variable', а курсор_или_переменная – это идентификатор курсора или курсорной переменной, информацию о котором требуется получить. Результаты, возвращаемые функцией CURSOR_STATUS, представлены в таблице 27.3.

    Таблица 27.3. Значения, возвращаемые функцией CURSOR_STATUS.Возвращаемое значениеОписание
    1Если функция вызывалась для динамического курсора, множество курсора состоит из нуля, одной или нескольких строк. Если функция вызывалась для другого типа курсора, курсор состоит по меньшей мере из одной строки.
    0Множество курсора пусто.
    -1Курсор закрыт.
    -2Возвращается только для курсорной переменной. Либо курсор, назначенный указанной переменной, закрыт, либо переменной не назначен какой-либо курсор.
    -3Указанный курсор или курсорная переменная не существует.


    Используйте функции мониторинга курсором

  • Нажмите кнопку Load Script (Загрузить сценарий)Мониторинг курсоров Transact-SQL в панели инструмента анализатора запросов Query Analyzer. Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла запроса).

    Мониторинг курсоров Transact-SQL

  • Выделите сценарий StatusFunctions и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий в окно Query (Запрос).

    Мониторинг курсоров Transact-SQL

  • Нажмите кнопку Execute Query (Выполнить запрос)Мониторинг курсоров Transact-SQL в панели инструментов анализатора запросов Query Analyzer. Query Analyzer выполнит запрос. Будет отображено четыре панели сетки. Первая создается оператором SELECT @@CURSOR_ROWS, а вторая – оператором FETCH. Третья панель сетки является результатом выполнения оператора SELECT @@FETCH_STATUS, а четвертая – результатом выполнения оператора SELECT CURSOR_STATUS('local', 'simpleCursor').

    Мониторинг курсоров Transact-SQL




  • Создание курсоров


    Первым шагом в использовании курсора является его создание. Курсоры Transact-SQL создаются с помощью оператора DECLARE CURSOR.
    Внимание! SQL Server поддерживает два различных метода создания курсоров: с использованием синтаксиса SQL-92 и с использованием синтаксиса Transact-SQL. Синтаксис SQL-92 соответствует стандарту ANSI, но имеет меньшие функциональные возможности, чем синтаксис Transact-SQL, который и рассматривается здесь.
    Оператор DECLARE CURSOR имеет следующий синтаксис:
    DECLARE имя_курсора CURSOR [видимость] [прокрутка] [тип] [блокировка] [TYPE_WARNING] FOR оператор_выборки [FOR UPDATE [OF имена_столбцов]]
    Обратите внимание, что все параметры, определяющие характеристики курсора, – видимость, тип и т.д. – являются необязательными. Значениями по умолчанию для этих параметров являются сложными и могут указывать, либо не указывать способы взаимодействия с исходными записями или представлениями, а также опции работы с базой данных. Чтобы сделать восприятие оператора долее удобным, лучше явно задавать все необходимые вам параметры. При этом вы будете точно знать, что получите.
    Видимость курсора определяется с помощью ключевых слов LOCAL или GLOBAL, которые имеют тот же эффект, что и ключевые слова @local_table или @@global_table при объявлении временных таблиц.
    Совет. SQL Server будет закрывать и освобождать локальный курсор при выходе за пределы его области действия (видимости), но лучше всегда делать это явно.
    Параметр прокрутка допускает использование ключевых слов FORWARD_ONLY и SCROLL, которые задают, соответственно, возможность перемещения только от начала к концу, или в любом направлении.
    Параметр тип определяет тип создаваемого курсора. Здесь допустимы ключевые слова STATIC, KEYSET, DYNAMIC и FAST_FORWARD. Параметр типа FAST_FORWARD и параметр прокрутки FORWARD_ONLY являются взаимно исключающими.
    Параметр блокировка определяет, могут ли строки модифицироваться курсором, и если да, то могут ли их модифицировать другие пользователи. Если используется ключевое слово READ_ONLY, курсор не может вносить никаких изменений в исходные данные. Тем не менее, другие пользователи могут модифицировать данные, либо это можете делать вы сами с помощью оператора UPDATE. Если в качестве параметра блокировка задано SCROLL_LOCKS, обновления могут быть выполнены только курсором. Все другие операторы UPDATE, как внутри этого же пакета, так и предоставляемые другими пользователями, выполняться не будут.
    Последняя опция блокировки, OPTIMISTIC, позволяет осуществлять обновления строк как внутри курсора, так и вне его. Это наиболее гибкая опция, но при этом всегда существует вероятность, что модификация, выполненная курсором, окончится неудачей, если строка была изменена после ее чтения курсором.
    Параметр TYPE_WARNING предписывает SQL Server отправлять предупреждающее сообщение клиенту, если тип курсора преобразуется от заданного к другому типу. Это возможно, если вы объявляете курсор, который не поддерживает заданный оператор SELECT.
    Параметр оператор_выборки, указываемый в фразе FOR, является обязательным. Он задает строки, которые будут включены во множество курсора.
    Фраза FOR UPDATE является необязательной. По умолчанию курсоры являются модифицируемыми, если не задан параметр READ_ONLY, однако и в этом случае лучше все-таки использовать эту фразу, чтобы быть уверенным в полученном результате. Вы можете использовать раздел OF имена_столбцов, чтобы указать определенные строки, для которых вы допускаете модификацию. Если вы опускаете раздел OF имена_столбцов, модификация может быть выполнена для всех столбцов, указанных в операторе SELECT.

    DECLARE myCursor CURSOR LOCAL FAST_FORWARD FOR SELECT OilName FROM Oils DECLARE @myCursorVariable CURSOR SET @myCursorVariable = myCursor

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

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

    DECLARE @myCursorVariable CURSOR SET @myCursorVariable = CURSOR LOCAL FAST_FORWARD FOR SELECT OilName FROM Oils

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

    Открытие курсора

    Объявление курсора создает объект курсора, но не создает набор записей, которыми курсор будет манипулировать (множество курсора). Множество курсора не создается, пока вы не откроете курсор. После достаточно сложного синтаксиса оператора DECLARE CURSOR, синтаксис оператора кажется вполне прозрачным:

    OPEN [GLOBAL] курсор_или_переменная

    Ключевое слово GLOBAL помогает избежать конфликтов: если курсор, объявленный с ключевым словом LOCAL, и курсор, объявленный с ключевым словом GLOBAL, имеют одинаковый идентификатор, ссылки на курсор будут по умолчанию отнесены к локальному курсору, если вы не использовали ключевое слово GLOBAL. Как и в других подобных случаях, лучше явно указывать ключевое слово, если вы открываете глобальный курсор.

    Закрытие курсора

    Закончив использование курсора, вы должны его закрыть. Оператор CLOSE освобождает ресурсы, используемые для обслуживания множества курсора, а также освобождает все блокировки, наложенные на строки, если вы использовали параметр SCROLLOCKS в операторе DECLARE. Синтаксис команды CLOSE почти идентичен синтаксису оператора OPEN – меняется только ключевое слово:

    CLOSE [GLOBAL] курсор_или_переменная

    Освобождение курсора

    Последним оператором в последовательности действий, связанных с созданием курсора, является оператор DEALLOCATE. Синтаксис его также прост:



    DEALLOCATE [GLOBAL] курсор_или_переменная

    Однако здесь есть одна тонкость: оператор DEALLOCATE удаляет идентификатор или курсорную переменную, но он не обязательно удаляет сам курсор. Сам курсор не удаляется до тех пор, пока все ссылающиеся на него идентификаторы будут либо освобождены, либо перестанут действовать (при выходе за пределы области действия). Рассмотрим следующие примеры:

    -- Создание курсора DECLARE myCursor CURSOR KEYSET READ_ONLY FOR SELECT * FROM Oils -- Создание курсорной переменной DECLARE @cursorVariable CURSOR -- Создание множества записей курсора OPEN myCursor -- Назначение переменной курсору SET @cursorVariable = myCursor -- Освобождение курсора DEALLOCATE myCursor

    После освобождения курсора идентификатор myCursor больше не ассоциируется с множеством курсора, но поскольку на множество курсора еще ссылается переменная @cursorVariable, курсор и множество курсора не освобождаются. Если вы явно не освободите также и курсорную переменную, курсор и множество курсора будут существовать, пока переменная не утратит свое действие.


    Использование хранимых процедур


    Для вызова пользовательских и системных хранимых процедур используется оператор EXECUTE. Если хранимая процедура не требует параметров, или если она не возвращает результат, синтаксис ее будет очень простым:
    EXECUTE имя_процедуры
    Совет. Ключевое слово EXECUTE можно не указывать, если вызов хранимой процедуры является первым оператором в пакете. Однако, как и в других подобных случаях, лучше лишний раз подстраховаться. Поэтому заведите привычку всегда использовать ключевое слово EXECUTE или его аббревиатуру EXEC при использовании хранимой процедуры.
    Выполните простую хранимую процедуру
  • Нажмите кнопку New Query (Новый запрос)Использование хранимых процедур в панели инструментов анализатора запросов Query Analyzer. Query Analyzer откроет новое окно Query (Запрос).
  • Введите в окне запроса Query следующий оператор: EXECUTE sp_helpdb
  • Нажмите кнопку Execute Query (Выполнить запрос)Использование хранимых процедур в панели инструментов анализатора запросов Query Analyzer. Query Analyzer выполнит хранимую процедуру и отобразит результаты.
    Использование хранимых процедур
    увеличить изображение


  • Внимание! Поскольку процедура sp_help отображает все базы данных, имеющиеся на текущем сервере, ваша структура может не совпадать с той, которая представлена на рисунке. В вашей панели сетки Grid Pane могут содержаться другие базы данных.
    Если хранимая процедура принимает входные параметры, вы можете предоставить их, указав позицию или имя. Чтобы предоставит параметры по позиции, вам нужно просто указать их после имени хранимой процедуры, отделяя запятыми:
    EXECUTE имя_процедуры параметр [ , параметр ...]
    Использование Object Browser для работы с хранимыми процедурами
    Панель Object Browser содержит папку Stored Procedures для каждой базы данных, включая главную. Каждая хранимая процедура, содержащаяся в списке, имеет папку Parameters. В этой папке в определенном порядке размещаются параметры хранимой процедуры, поэтому вы можете воспользоваться ею для проверки имен параметров и их позиций.
    Для создания сценария EXECUTE для хранимой процедуры вы также можете воспользоваться командами скриптования из контекстного меню. Сценарий EXECUTE в Object Browser создает включения объявлений локальных переменных для возвращаемых значений и выходных параметров.

    Выполните хранимую процедуру с входными параметрами

  • Выберите панель редактирования Editor Pane в окне Query (Запрос) и нажмите кнопку Clear Window (Очистить окно)Использование хранимых процедур в панели инструментов анализатора запросов Query Analyzer.
  • Введите следующий оператор в окне Query (Запрос):

    EXECUTE sp_dboption 'Aromatherapy', 'read only'
  • Нажмите кнопку Execute Query (Выполнить запрос)Использование хранимых процедур в панели инструментов анализатора запросов Query Analyzer. Query Analyzer выполнит запрос и отобразит результаты.

    Использование хранимых процедур



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

    EXECUTE хранимая_процедура @имя_парам = значение [, @имя_парам = значение ...]

    Выполните хранимую процедуру с именованными параметрами

  • Выберите панель редактирования Editor Pane в окне Query (Запрос) и нажмите кнопку Clear Window (Очистить окно)Использование хранимых процедур в панели инструментов анализатора запросов Query Analyzer.
  • Введите следующий оператор в окне Query (Запрос):

    EXECUTE sp_dboption @optname = 'read only', @dbname = 'Aromatherapy'

  • Нажмите кнопку Execute Query (Выполнить запрос)Использование хранимых процедур в панели инструментов анализатора запросов Query Analyzer. Query Analyzer выполнит запрос и отобразит результаты.

    Использование хранимых процедур
    увеличить изображение



  • Некоторые хранимые процедуры предоставляют для своих параметров значения по умолчанию. Подобно значениям по умолчанию для столбцов таблицы, параметры по умолчанию используются хранимой процедурой, если пользователь явно не задал значение. Использовать умолчание проще для именованных параметров – вам достаточно не указывать значение для параметра.

    Если вы передаете параметры по позициям, обращение к умолчанию параметра зависит от его положения в списке. Если параметр находится в конце списка, или если этот параметр единственный, вы можете просто опустить его (не указывать). Если параметр не является последним параметром в списке, вы можете воспользоваться ключевым словом DEFAULT, чтобы указать хранимой процедуре использовать значение по умолчанию.

    Выполните хранимую процедуру с использованием ключевого слова DEFAULT

  • Выберите панель редактирования Editor Pane в окне Query (Запрос) и нажмите кнопку Clear Window (Очистить окно)Использование хранимых процедур в панели инструментов анализатора запросов Query Analyzer.
  • Введите следующий оператор в окне Query (Запрос):



    EXECUTE sp_dboption DEFAULT; 'read only'
  • Нажмите кнопку Execute Query (Выполнить запрос)Использование хранимых процедур в панели инструментов анализатора запросов Query Analyzer. Query Analyzer выполнит запрос и отобразит результаты.

    Использование хранимых процедур



  • Кроме доступа к переданным им данным, хранимые процедуры могут также возвращать данные обратно через выходные параметры. Выходные параметры должны быть локальными переменными. Они могут быть заданы либо путем указания их имен, либо путем указания их позиций, но при этом после выходного параметра должно следовать ключевое слово OUTPUT.

    Выполните хранимую процедуру с выходными параметрами

  • Выберите панель редактирования Editor Pane в окне Query (Запрос) и нажмите кнопку Clear Window (Очистить окно)Использование хранимых процедур в панели инструментов анализатора запросов Query Analyzer.
  • Нажмите кнопку Load Script (Загрузить сценарий)Использование хранимых процедур в панели инструментов анализатора запросов Query Analyzer. Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла запроса).

    Использование хранимых процедур

  • Перейдите к папке SQL 2000 Step by Step в корневой директории, выделите сценарий TableValidation и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий.

    Использование хранимых процедур

  • Нажмите кнопку Execute Query (Выполнить запрос)Использование хранимых процедур в панели инструментов анализатора запросов Query Analyzer. Query Analyzer выполнит сценарий и отобразит результаты.

    Использование хранимых процедур



  • Синтаксис для хранимой процедуры, возвращающей значения, является неким гибридом оператора EXECUTE и оператора SET:

    EXECUTE @имя_переменной = хранимая_процедура [, парам [, парам ...] ]

    Большинство системных процедур имеют возвращаемые значения, но поскольку они являются параметрами по умолчанию, их можно игнорировать в описании вызова процедуры. Если вы не указали локальную переменную для приема результатов, SQL Server просто отбросит значение.

    Выполните хранимую процедуру с возвращаемым значением

  • Нажмите кнопку Load Script (Загрузить сценарий)Использование хранимых процедур в панели инструментов анализатора запросов Query Analyzer. Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла запроса).

    Использование хранимых процедур

  • Выделите сценарий ReturnValue и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий.

    Использование хранимых процедур

  • Нажмите кнопку Execute Query (Выполнить запрос)Использование хранимых процедур в панели инструментов анализатора запросов Query Analyzer. Query Analyzer выполнит запрос и отобразит результаты.

    Использование хранимых процедур

  • Выберите вкладку Message (Сообщение). Query Analyzer отобразит результаты выполнения оператора PRINT, который выводит возвращаемое значение.

    Использование хранимых процедур




  • Создание хранимых процедур


    Как вы можете догадаться, хранимые процедуры создаются с использованием одной из разновидностей оператора CREATE – на этот раз, CREATE PROCEDURE. Синтаксис оператора CREATE PROCEDURE следующий:
    CREATE PROCEDURE имя_процедуры [список_параметров] AS операторы_процедуры
    Имя_процедуры должно отвечать правилам, принятым для идентификаторов.
    Совет. Вы можете создать временную локальную или глобальную хранимую процедуру, указав перед именем процедуры # или ## соответственно.
    Операторы_процедуры, следующие после ключевого слова AS в операторе CREATE, определяют действия, которые будут выполняться при вызове хранимой процедуры. Они по своему функциональному назначению полностью аналогичны сценариям. Фактически можно считать все, что находится перед ключевым словом AS, заголовком SQL-сценария.
    Хранимые процедуры могут вызвать другие хранимые процедуры, т. е. реализовывать вложенность. Фактическая глубина вложенности хранимых процедур составляет 32.
    Создайте простую хранимую процедуру
  • Нажмите кнопку Load Script (Загрузить сценарий)Создание хранимых процедур в панели инструментов анализатора запросов Query Analyzer. Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла запроса).
    Создание хранимых процедур

  • Выделите сценарий SimpleSP и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий.
    Создание хранимых процедур

  • Нажмите кнопку Execute Query (Выполнить запрос)Создание хранимых процедур в панели инструментов анализатора запросов Query Analyzer. Query Analyzer создаст хранимую процедуру.
    Создание хранимых процедур

  • Нажмите кнопку New Query (Новый запрос)Создание хранимых процедур в панели инструментов анализатора запросов Query Analyzer. Query Analyzer отобразит новое окно Query (Запрос).
  • Введите в окне вкладки Editor (Редактор) следующий оператор:
    EXECUTE SimpleSP
  • Нажмите кнопку Execute Query (Выполнить запрос)Создание хранимых процедур в панели инструментов анализатора запросов Query Analyzer. Query Analyzer выполнит хранимую процедуру и отобразит результаты.
    Создание хранимых процедур

  • Закройте окно Query (Запрос), не сохраняя изменения при появлении соответствующего окна-запроса.

  • Каждый из параметров в списке_параметров имеет следующую структуру:

    @имя_параметра тип_данных [= значение_по_умолчанию] [OUTPUT]

    Имя_параметра должно удовлетворять правилам, принятым для идентификаторов. Имена параметров должны начинаться с символа @, подобно локальным переменным. Параметры являются локальными переменными; они видимы только в пределах хранимой процедуры. В одной хранимой процедуре может быть использовано максимально 2100 параметров.

    Значение_по_умолчанию представляет собой значение, которое будет использоваться хранимой процедурой в случае, если пользователь не укажет значение для входного параметра в вызове хранимой процедуры. Ключевое слово OUTPUT, которое также не является обязательным, определяет параметры, которые будут возвращены в вызвавший процедуру сценарий.

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

  • Перейдите к окну, содержащему сценарий SimpleSP.
  • Нажмите кнопку Load Script (Загрузить сценарий)Создание хранимых процедур в панели инструментов анализатора запросов Query Analyzer. Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла запроса).

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

  • Выделите сценарий InputSP и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий.

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

  • Нажмите кнопку Execute Query (Выполнить запрос)Создание хранимых процедур в панели инструментов анализатора запросов Query Analyzer. Query Analyzer создаст хранимую процедуру.

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

  • Нажмите кнопку New Query (Новый запрос)Создание хранимых процедур в панели инструментов анализатора запросов Query Analyzer. Query Analyzer отобразит новое окно Query (Запрос).
  • Введите на вкладке Editor (Редактирование) следующий оператор:

    EXECUTE InputSP 'Basil'
  • Нажмите кнопку Execute Query (Выполнить запрос)Создание хранимых процедур в панели инструментов анализатора запросов Query Analyzer. Query Analyzer выполнит хранимую процедуру и отобразит результаты.

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

  • Закройте окно Query (Запрос), отклонив сохранение изменений в появившемся окне-запросе.


  • Создайте хранимую процедуру со значением по умолчанию

  • Перейдите к окну, содержащему сценарий InputSP.
  • Нажмите кнопку Load Script (Загрузить сценарий)Создание хранимых процедур в панели инструментов анализатора запросов Query Analyzer. Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла запроса).



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

  • Выделите сценарий DefaultSP и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий.

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

  • Нажмите кнопку Execute Query (Выполнить запрос)Создание хранимых процедур в панели инструментов анализатора запросов Query Analyzer. Query Analyzer создаст хранимую процедуру.

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

  • Нажмите кнопку New Query (Новый запрос)Создание хранимых процедур в панели инструментов анализатора запросов Query Analyzer. Query Analyzer отобразит новое окно Query (Запрос).
  • Введите на вкладке Editor (Редактирование) следующий оператор:

    EXECUTE DefaultSP
  • Нажмите кнопку Execute Query (Выполнить запрос)Создание хранимых процедур в панели инструментов анализатора запросов Query Analyzer. Query Analyzer выполнит хранимую процедуру и отобразит результаты.

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

  • Закройте окно Query (Запрос), отклонив сохранение изменений в появившемся окне-запросе.


  • Создайте хранимую процедуру с выходным параметром

  • Перейдите к окну, содержащему сценарий DefaultSP.
  • Нажмите кнопку Load Script (Загрузить сценарий)Создание хранимых процедур в панели инструментов анализатора запросов Query Analyzer. Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла запроса).

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

  • Выделите сценарий OutputSP и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий.

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

  • Нажмите кнопку Execute Query (Выполнить запрос)Создание хранимых процедур в панели инструментов анализатора запросов Query Analyzer. Query Analyzer создаст хранимую процедуру.

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

  • Нажмите кнопку New Query (Новый запрос)Создание хранимых процедур в панели инструментов анализатора запросов Query Analyzer. Query Analyzer отобразит новое окно Query (Запрос).
  • Введите следующие операторы на вкладке Editor (Редактор):

    DECLARE @myOutput char(6) EXECUTE OutputSP @myOutput OUTPUT SELECT @myOutput
  • Нажмите кнопку Execute Query (Выполнить запрос)Создание хранимых процедур в панели инструментов анализатора запросов Query Analyzer. Query Analyzer выполнит хранимую процедуру и отобразит результаты.

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

  • Закройте окно Query (Запрос), отклонив сохранение изменений в появившемся окне-запросе.


  • Возврат значений реализуется с помощью оператора RETURN, который имеет следующую форму:

    RETURN(int)

    В операторе RETURN int – это целочисленное значение. Как мы видели раньше, возврат значений чаще всего используется для определения статуса выполнения хранимой процедуры. При этом 0 указывает на успешное завершение выполнения, а любое другое число указывает на ошибку. Ошибки могут быть проанализированы с помощью глобальной переменной @@ERROR, которая возвращает статус выполнения последней команды Transact-SQL: 0 указывает на успешное выполнение, а ненулевое значение указывает, что имела место ошибка.

    Совет. Строка сообщения об ошибках SQL Server хранится в главной базе данных в таблице sysmessage. Вы можете добавить свои собственные сообщения об ошибках в эту таблицу, воспользовавшись системной процедурой sp_addmessage, а затем применить функцию RAISERROR для генерирования характерных для базы данных, или даже для приложения, ошибок.

    Создайте хранимую процедуру с возвращаемым значением

  • Перейдите к окну, содержащему сценарий OutputSP.
  • Нажмите кнопку Load Script (Загрузить сценарий)Создание хранимых процедур в панели инструментов анализатора запросов Query Analyzer. Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла запроса).



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

  • Выделите сценарий ErrorSP и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий.

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

  • Нажмите кнопку Execute Query (Выполнить запрос)Создание хранимых процедур в панели инструментов анализатора запросов Query Analyzer. Query Analyzer создаст хранимую процедуру.

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

  • Нажмите кнопку New Query (Новый запрос)Создание хранимых процедур в панели инструментов анализатора запросов Query Analyzer. Query Analyzer отобразит новое окно Query (Запрос).
  • Введите следующие операторы на вкладке Editor (Редактор):

    DECLARE @theError int EXECUTE @theError = ErrorSP SELECT @theError AS 'Return Value'
  • Нажмите кнопку Execute Query (Выполнить запрос)Создание хранимых процедур в панели инструментов анализатора запросов Query Analyzer. Query Analyzer выполнит хранимую процедуру и отобразит результаты. Во второй панели сетки отображается 0, что указывает на успешное выполнение команды.

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

  • Закройте окно Query (Запрос), без сохранения изменений.



  • Использование функции UPDATE


    SQL Server предоставляет специальную функцию, UPDATE, которая может быть использована в триггере для определения, подвергся ли изменению определенный столбец в строке. Функция UPDATE имеет следующий синтаксис:
    UPDATE (имя_столбца)
    Функция UPDATE будет возвращать TRUE, если значения данных для указанного столбца были изменены командой INSERT или командой UPDATE.
    Совет. Другая функция Transact-SQL, COLUMNS_UPDATED, возвращает битовую маску, биты которой устанавливаются в единицу для тех столбцов, которые были модифицированы. Функция COLUMNS_UPDATED может оказаться более эффективной, чем функция UPDATE, если вам необходимо проверить статус нескольких столбцов.
    Используйте функцию UPDATE
  • Перейдите к окну Query (Запрос), содержащему сценарий insteadOf.
  • Нажмите кнопку Load Script (Загрузить сценарий)Использование функции UPDATE в панели инструментов анализатора запросов Query Analyzer. Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла запроса).
    Использование функции UPDATE

  • Выделите сценарий UpdateFunc и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий в окно Query (Запрос).
    Использование функции UPDATE

  • Нажмите кнопку Execute Query (Выполнить запрос)Использование функции UPDATE в панели инструментов анализатора запросов Query Analyzer. Кнопка Execute Query (Выполнить запрос) Query Analyzer создаст триггер.
  • Перейдите к окну Query (Запрос), содержащему сценарий TestAfterUpdate.
  • Нажмите кнопку Execute Query (Выполнить запрос)Использование функции UPDATE в панели инструментов анализатора запросов Query Analyzer. Query Analyzer выполнит сценарий и отобразит результат.
    Использование функции UPDATE




  • Использование команды CREATE TRIGGER


    Как и любые другие объекты базы данных, триггер определяется с помощью соответствующей формы оператора CREATE. Базовый синтаксис оператора создания триггера следующий:
    CREATE TRIGGER имя_триггера ON таблица_или_представление тип_триггера, список_команд AS операторы_SQL
    Имя_триггера должно удовлетворять правилам, принятым для идентификаторов. Таблица_или_представление может быть именем представления, только если тип_триггера есть INSTEAD OF, поскольку только этот тип триггера вы можете определять для представлений. Триггеры не могут быть созданы для временных таблиц или системных таблиц, но они могут ссылаться на временные таблицы.
    Тип_триггера должен быть выражен одним из ключевых слов AFTER, FOR или INSTEAD OF, в то время как список_команд может быть любой комбинацией команд INSERT, UPDATE или DELETE. Если вы указываете более одной команды, их следует отделять запятыми.
    Примечание. Ранние версии SQL Server поддерживали только триггеры AFTER и использовали ключевое слово FOR в качестве типа_триггера. Этот синтаксис по-прежнему поддерживается SQL Server 2000, но это будет означать то же самое, что триггер AFTER.
    Операторы_SQL, следующие за ключевым словом AS, определяют действия, выполняемые триггером. Здесь имеется аналогия с хранимыми процедурами, за исключением того, что триггеры не имеют параметров.
    Создайте триггер AFTER
  • Нажмите кнопку New Query (Новый запрос)Использование команды CREATE TRIGGER в панели инструментов анализатора запросов Query Analyzer. Query Analyzer отобразит новое окно Query (Запрос).
  • Нажмите кнопку Load Script (Загрузить сценарий)Использование команды CREATE TRIGGER в панели инструментов анализатора запросов Query Analyzer. Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла запроса).
    Использование команды CREATE TRIGGER

  • Перейдите к папке SQL 2000 Step by Step в корневой директории, выделите сценарий afterUpdate и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий в окно Query (Запрос).
    Использование команды CREATE TRIGGER

  • Нажмите кнопку Execute Query (Выполнить запрос)Использование команды CREATE TRIGGER в панели инструментов анализатора запросов Query Analyzer. Query Analyzer создаст триггер.
  • Нажмите кнопку New Query (Новый запрос)Использование команды CREATE TRIGGER в панели инструментов анализатора запросов Query Analyzer. Query Analyzer откроет новое окно Query (Запрос).
  • Нажмите кнопку Load Script (Загрузить сценарий)Использование команды CREATE TRIGGER в панели инструментов анализатора запросов Query Analyzer. Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла запроса).
    Использование команды CREATE TRIGGER

  • Выделите сценарий TestAfterUpdate и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий.
    Использование команды CREATE TRIGGER

  • Нажмите кнопку Execute Query (Выполнить запрос)Использование команды CREATE TRIGGER в панели инструментов анализатора запросов Query Analyzer. Query Analyzer выполнит сценарий и отобразит результат.
    Использование команды CREATE TRIGGER



  • Использование команды CREATE TRIGGER

  • Выделите сценарий TestAfterUpdate и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий.

    Использование команды CREATE TRIGGER

  • Нажмите кнопку Execute Query (Выполнить запрос)Использование команды CREATE TRIGGER в панели инструментов анализатора запросов Query Analyzer. Query Analyzer выполнит сценарий и отобразит результат.

    Использование команды CREATE TRIGGER



  • Создайте триггер INSTEAD OF

  • Перейдите к окну запроса Query, содержащему сценарий afterUpdate.
  • Нажмите кнопку Load Script (Загрузить сценарий)Использование команды CREATE TRIGGER в панели инструментов анализатора запросов Query Analyzer. Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла запроса).

    Использование команды CREATE TRIGGER

  • Выделите сценарий insteadOf и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий в окно Query (Запрос).

    Использование команды CREATE TRIGGER

  • Нажмите кнопку Execute Query (Выполнить запрос)Использование команды CREATE TRIGGER в панели инструментов анализатора запросов Query Analyzer. Query Analyzer создаст триггер.
  • Перейдите к окну Query (Запрос), содержащему сценарий TestAfterUpdate.
  • Нажмите кнопку Execute Query (Выполнить запрос)Использование команды CREATE TRIGGER в панели инструментов анализатора запросов Query Analyzer. Query Analyzer выполнит сценарий и отобразит результат.

    Использование команды CREATE TRIGGER




  • Использование таблиц вставки и удаления


    SQL Server создает две таблицы, облегчающие манипулирование данными при применении триггеров. Таблицы вставки и удаления представляют собой временные резидентно хранящиеся в памяти таблицы, которые содержат строки, подвергшиеся воздействию команды, вызвавшей триггер.
    Если триггер вызывается из команды DELETE, таблица удаления будет содержать строки, которые были удалены из таблицы. При вызове из команды INSERT таблица вставки будет содержать копию новых (вставляемых) строк. Физически оператор UPDATE представляет собой последовательное выполнение команды удаления DELETE и вставки INSERT, так что таблица удаления будет содержать старые значения, а таблица вставки – новые значения. Вы можете обращаться к содержимому этих таблиц из триггера, но вы не можете изменять их.
    Напомним, что триггеры AFTER не вызываются до тех пор, пока не будет осуществлена модификация таблицы, т.е. строки в исходных таблицах уже подвергнутся изменениям. С другой стороны, триггер INSTEAD OF вызывается вместо действия, для которого он определен, поэтому таблица еще не будет изменена. Фактически, таблица вообще не будет изменена, если команда INSTEAD OF не назначит соответствующие команды.
    Внимание! Триггер вызывается для команды, а не для строки. Вам следует проявлять осторожность при написании триггеров, затрагивающих несколько строк (в случае их наличия) в таблицах вставки и удаления. Глобальная переменная @@ROWCOUNT будет возвращать количество записей в этих таблицах, если вы обратитесь к ней в начале описания вашего триггера.
    Используйте таблицу удаления
  • Перейдите к окну Query (Запрос), содержащему сценарий UpdateFunc.
  • Нажмите кнопку Load Script (Загрузить сценарий)Использование таблиц вставки и удаления в панели инструментов анализатора запросов Query Analyzer. Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла запроса).
    Использование таблиц вставки и удаления

  • Выделите сценарий tableTrigger и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий в окно Query (Запрос).
    Использование таблиц вставки и удаления

  • Нажмите кнопку Execute Query (Выполнить запрос)Использование таблиц вставки и удаления в панели инструментов анализатора запросов Query Analyzer. Query Analyzer создаст триггер.
  • Перейдите к окну Query (Запрос), содержащему сценарий TestAfterUpdate.
  • Нажмите кнопку Execute Query (Выполнить запрос)Использование таблиц вставки и удаления в панели инструментов анализатора запросов Query Analyzer. Query Analyzer выполнит сценарий и отобразит результат.
    Использование таблиц вставки и удаления




  • Триггеры INSTEAD OF


    Триггеры INSTEAD OF заменяют команду, для которой они объявлены. Подобно триггерам AFTER, вы можете определять триггеры INSTEAD OF для команд INSERT, UPDATE или DELETE. Один триггер может быть применен к нескольким командам.
    Однако, в отличие от триггеров AFTER, вы можете создавать триггеры INSTEAD OF как для таблиц, так и для представлений, но для каждого действия над этой таблицей или представлением может быть создан только один триггер INSTEAD OF.
    Триггеры INSTEAD OF несовместимы с каскадными изменениями связанных данных. Вы не можете объявить триггер INSTEAD OF DELETE или INSTEAD OF UPDATE для таблицы, внешний ключ которой затрагивается действиями удаления (DELETE) или модификации (UPDATE).
    Поскольку триггеры INSTEAD OF могут быть объявлены для представлений, они чрезвычайно полезны для получения функциональных возможностей представления, которые не могут быть доступны иным способом. Например, SQL Server не дает возможности применить для представления оператор INSERT, содержащий фразу GROUP BY, но позволяет вам определить триггер INSTEAD OF INSERT для представления. Вы можете воспользоваться триггером для вставки записей в таблицы, лежащие в основе представления, тем самым давая знать пользователю, что новая строка была вставлена в представление.
    Триггеры "BEFORE"
    Триггера BEFORE не существует, но триггер INSTEAD OF может порождать команду, для которой он объявлен, и эта команда будет выдаваться, как если бы триггера INSTEAD OF не было.
    Например, если вы хотите проверить некое условие до выполнения команды INSERT, вы можете объявить триггер INSTEAD OF INSERT. Триггер INSTEAD OF будет выполнять проверку, а затем выполнять команду INSERT для таблицы. Оператор INSERT будет выполняться обычным образом, не порождая рекурсивных вызовов триггера INSTEAD OF.


    Применение пользовательских функций в операторах Transact-SQL


    Скалярные пользовательские функции могут использоваться везде, где допустимо использовать тип данных, который они возвращают. Табличные пользовательские функции могут быть использованы только во фразе FROM оператора SELECT.
    Примечание. Если фраза SELECT находится внутри оператора DECLARE CURSOR, курсор должен иметь тип STATIC и READ_ONLY.
    Используйте скалярную функцию в операторе PRINT
  • Нажмите кнопку New Query (Новый запрос)Применение пользовательских функций в операторах Transact-SQL в панели инструментов анализатора запросов Query Analyzer. Query Analyzer откроет новое окно Query (Запрос).
  • Введите следующий оператор SQL в окне Query (Запрос):
    PRINT dbo.scalarFunction('German Chamomile')
  • Нажмите кнопку Execute Query (Выполнить запрос)Применение пользовательских функций в операторах Transact-SQL в панели инструментов анализатора запросов Query Analyzer. Query Analyzer выполнит оператор и отобразит результат.
    Применение пользовательских функций в операторах Transact-SQL


  • Используйте скалярную функцию в операторе SELECT
  • Выберите вкладку Editor (Редактор) в окне Query (Запрос) и нажмите кнопку Clear Window (Очистить окно)Применение пользовательских функций в операторах Transact-SQL в панели инструментов анализатора запросов Query Analyzer. Query Analyzer очистит окно Query (Запрос).
  • Введите следующий оператор SQL в окне Query (Запрос):
    SELECT OilID, dbo.scalarFunction(OilName) FROM Oils
  • Нажмите кнопку Execute Query (Выполнить запрос)Применение пользовательских функций в операторах Transact-SQL в панели инструментов анализатора запросов Query Analyzer. Query Analyzer выполнит оператор и отобразит результат.
    Применение пользовательских функций в операторах Transact-SQL


  • Используйте табличную функцию в операторе SELECT
  • Выберите вкладку Editor (Редактор) в окне Query (Запрос) и нажмите кнопку Clear Window (Очистить окно)Применение пользовательских функций в операторах Transact-SQL в панели инструментов анализатора запросов Query Analyzer. Query Analyzer очистит окно Query (Запрос).
  • Введите следующий оператор SQL в окне Query (Запрос):
    SELECT * FROM tableFunction()
  • Нажмите кнопку Execute Query (Выполнить запрос)Применение пользовательских функций в операторах Transact-SQL в панели инструментов анализатора запросов Query Analyzer. Query Analyzer выполнит оператор и отобразит результат.
    Применение пользовательских функций в операторах Transact-SQL

  • Закройте окно Query (Запрос), отказавшись от сохранения изменений при появлении окна-запроса.



  • Применение пользовательских функций в определениях таблиц


    Пользовательские функции могут быть использованы в определениях таблиц, предоставляемых владельцем таблицы, но на параметры, используемые в этих функциях, накладываются некоторые ограничения.
    При использовании в качестве типа данных для вычисляемого столбца, параметры пользовательской функции должны быть либо другими столбцами в таблице, либо константами. Это справедливо и в том случае, если пользовательская функция используется в качестве проверочного ограничения типа CHECK. Если пользовательская функция используется как значение по умолчанию для столбца, параметры должны быть константами.
    Примените пользовательскую функцию в вычисляемом столбце
  • Перейдите к окну Query (Запрос), содержащему сценарий tableFunction.
  • Нажмите кнопку Load Script (Загрузить сценарий)Применение пользовательских функций в определениях таблиц в панели инструментов анализатора запросов Query Analyzer. Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла запроса).
    Применение пользовательских функций в определениях таблиц

  • Выделите сценарий computedColumn и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий.
    Применение пользовательских функций в определениях таблиц

  • Нажмите кнопку Execute Query (Выполнить запрос)Применение пользовательских функций в определениях таблиц в панели инструментов анализатора запросов Query Analyzer. Query Analyzer создаст функцию и таблицу.
  • Нажмите кнопку New Query (Новый запрос)Применение пользовательских функций в определениях таблиц в окне анализатора запросов Query Analyzer. Query Analyzer откроет новое окно Query (Запрос).
  • Нажмите кнопку Load Script (Загрузить сценарий)Применение пользовательских функций в определениях таблиц в панели инструментов анализатора запросов Query Analyzer. Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла запроса).
    Применение пользовательских функций в определениях таблиц

  • Выделите сценарий testColumn и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий.
    Применение пользовательских функций в определениях таблиц

  • Нажмите кнопку Execute Query (Выполнить запрос)Применение пользовательских функций в определениях таблиц в панели инструментов анализатора запросов Query Analyzer. Query Analyzer выполнит запрос и отобразит результат.
    Применение пользовательских функций в определениях таблиц



  • Применение пользовательских функций в определениях таблиц

  • Выделите сценарий defaultColumn и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий.

    Применение пользовательских функций в определениях таблиц

  • Нажмите кнопку Execute Query (Выполнить запрос)Применение пользовательских функций в определениях таблиц в панели инструментов анализатора запросов Query Analyzer. Query Analyzer создаст таблицу.
  • Перейдите к окну, содержащему функцию testColumn.
  • Нажмите кнопку Execute Query (Выполнить запрос)Применение пользовательских функций в определениях таблиц в панели инструментов анализатора запросов Query Analyzer. Query Analyzer выполнит запрос и отобразит результат.

    Применение пользовательских функций в определениях таблиц




  • Применение пользовательских функций


    Синтаксис вызова скалярных функций схож с синтаксисом, используемым для встроенных функций Transact-SQL:
    имя_владельца.имя_функции([список_параметров])
    Имя_владельца для скалярной функции является обязательным. Вы не можете использовать синтаксис с именованными параметрами (например, @имя_параметра = значение), а также не можете не указывать (опускать) параметры, но вы можете применять ключевое слово DEFAULT для указания значения по умолчанию, как вы это делаете для хранимых процедур.
    Совет. SQL Server предоставляет несколько встроенных пользовательских функций, не относящихся к обычным встроенным функциям. Они начинаются с fn_, а при их вызове используется специальный синтаксис ::имя_функции([список_параметров]). Символы :: заменяют имя_владельца и указывают на то, что функция является встроенной пользовательской функцией.
    Для скалярной функции вы также можете использовать оператор EXECUTE:
    EXECUTE @возвращаемое_значение = имя_функции(список_параметров)
    Если вы используете оператор EXECUTE для пользовательской функции, вам не нужно указывать имя_владельца. В этом синтаксисе вы можете использовать именованные параметры:
    EXECUTE @возвращаемое_значение = имя_функции @параметр = значение [, @параметр = значение [,...]]
    Если вы используете именованные параметры, параметры не обязательно должны следовать в том порядке, в котором они указаны в объявлении функции, но вам необходимо указать все параметры; нельзя опускать ссылку на параметр для использования значения по умолчанию.
    Для табличных пользовательских функций, как подставляемых, так и многооператорных, должен всегда использоваться тот же синтаксис, что и для встроенных функций:
    имя_функции([список_параметров])
    Имя_владельца здесь указывать не требуется, но необходимо включить все определенные параметры, как и при вызове любой пользовательской функции.


    Создание скалярной функции


    Оператор CREATE для скалярных пользовательских функций имеет достаточно простой синтаксис для функций всех типов:
    CREATE FUNCTION имя_функции ([список_параметров]) RETURNS тип_данных AS BEGIN [операторы_tsql] RETURN (возвращаемое_значение) END
    Имя_функции должно удовлетворять правилам, действующим для идентификаторов. Хотя список_параметров в описании оператора CREATE занимает иное место, чем список параметров для хранимой процедуры, они имеют аналогичный синтаксис:
    @имя_параметра тип_данных [= значение_по_умолчанию]
    Имя_параметра должно соответствовать правилам, принятым для идентификаторов, и начинаться с символа @. Пользовательские функции могут иметь до 1024 входных параметров. Выходные параметры пользовательские функции не поддерживают – единственным значением, возвращаемым функцией, является результат ее выполнения. Заметим, что список_параметров является необязательным, но наличие скобок обязательно.
    Фраза RETURNS определяет тип возвращаемых функцией значений. Скалярные функции могут возвращать любые скалярные системные типы данных, за исключением timestamp, text, ntext или image.
    Операторы BEGIN...END, которыми ограничиваются операторы_tsql, составляющие тело функции, являются обязательными, даже если тело функции состоит из одного оператора RETURN.
    Создайте скалярную функцию
  • Нажмите кнопку New Query (Новый запрос)Создание скалярной функции в панели инструментов анализатора запросов Query Analyzer. Query Analyzer откроет новое окно Query (Запрос).
  • Нажмите кнопку Load Script (Загрузить сценарий)Создание скалярной функции в панели инструментов анализатора запросов Query Analyzer. Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла запроса).
    Создание скалярной функции

  • Перейдите к папке SQL 2000 Step by Step в корневой директории, выделите сценарий scalarFunction и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий.
    Создание скалярной функции

  • Нажмите кнопку Execute Query (Выполнить запрос)Создание скалярной функции в панели инструментов анализатора запросов Query Analyzer. Query Analyzer создаст пользовательскую функцию
  • Раскройте папку Functions базы данных Aromatherapy в панели Object Browser и нажмите клавишу F5, чтобы обновить содержимое окна. В списке в панели Object Browser будет отображена функция dbo.scalarFunction.
    Создание скалярной функции
    увеличить изображение


  • Примечание. Созданные здесь пользовательские функции мы используем в следующем разделе.


    Создание табличных функций


    Оператор CREATE FUNCTION поддерживает создание двух различных типов табличных функций: подставляемых и многооператорных. Тело подставляемой табличной функции состоит из единственного оператора SELECT, в то время как многооператорная табличная функция может состоять из любого числа операторов Transact-SQL.
    Синтаксис для подставляемой табличной функции является усеченной разновидностью оператора CREATE FUNCTION. Блок BEGIN...END отсутствует, и нет никаких других операторов, кроме RETURN:
    CREATE FUNCTION имя_функции (список_параметров) RETURNS таблица AS RETURN (оператор_выборки)
    Создайте подставляемую табличную функцию
  • Перейдите к окну запроса, содержащему сценарий scalarFunction.
  • Нажмите кнопку Load Script (Загрузить сценарий)Создание табличных функций в панели инструментов анализатора запросов Query Analyzer. Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла запроса).
    Создание табличных функций

  • Выделите сценарий inlineFunction и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий.
    Создание табличных функций

  • Нажмите кнопку Execute Query (Выполнить запрос)Создание табличных функций в панели инструментов анализатора запросов Query Analyzer. Query Analyzer создаст пользовательскую функцию
  • Выделите папку Functions в панели Object Browser и нажмите клавишу F5, чтобы обновить содержимое окна. Query Analyzer отобразит в списке функцию dbo.inlineFunction.
    Создание табличных функций
    увеличить изображение


  • Синтаксис оператора CREATE FUNCTION для многооператорной табличной функции сочетает элементы синтаксиса для скалярной и для подставляемой функций:
    CREATE FUNCTION имя_функции (список_параметров) RETURNS @локальная_табличная_переменная TABLE (определение_таблицы) AS BEGIN операторы_tsql RETURN END
    Подобно скалярным функциям, в многооператорной табличной функции команды Transact-SQL располагаются внутри блока BEGIN...END. Поскольку блок может содержать несколько операторов SELECT, в фразе RETURNS вы должны явно определить таблицу, которая будет возвращаться.
    Поскольку оператор RETURN в многооператорной табличной функции всегда возвращает таблицу, заданную во фразе RETURNS, он должен выполняться без аргументов, – например, RETURN, а не RETURN @myTable.


    

        Базы данных: Разработка - Управление - Excel