Declare имя_переменной тип_переменной
⇐ ПредыдущаяСтр 2 из 2 Имя переменной всегда начинается с символа «@». Остальная часть имени переменной подчиняется стандартным правилам именования в MS SQL Server 2000. Переменные могут иметь те же самые типы, что и столбцы таблицы (типы рассмотрены в лаб. раб. №2). В одной команде declare можно объявить несколько переменных, отделяя их друг от друга запятыми. Например: declare @name varchar(20), @age tinyint. Для присваивания значений переменным, используют команды set или select. Первая команда позволяет присваивать значение только одной переменной, вторая – сразу нескольким. Например:
После знака равенства в операторе присваивания может находиться как некоторое атомарное значение, так и вычисляемое выражение. В выражениях допустимо применять имена переменных, имена столбцов таблиц базы данных, константные значения, операторы - арифметические, конкатенации, логические, битовые и сравнения, а также функции (как встроенные, так и пользовательские). К арифметическим операторам относят сложение (+), вычитание (-), умножение (*), деление (/) и нахождение остатка от деления (%). Используются для числовых типов. Оператор конкатенации предназначен для работы с символьными строками и позволяет объединять их. Оператор обозначается знаком (+). Операторы сравнения (<,>,=,!=,>= и <=)и битовые операторы (&, | и ^) аналогичны соответствующим операторам любого языка программирования. Набор логические операторов, в отличие от всех остальных, имеет помимо стандартных, операторы, не имеющие аналогов в традиционных языках программирования. Это связано со спецификой обрабатываемой информации. Рассмотрим логические операторы более подробно.
Для вывода информации, используют команду print или уже знакомую команду select. Разница в том, что команда print осуществляет простой вывод, а команда select – вывод в стандартный набор строк. Синтаксис команд одинаков – после команды перечисляются имена переменных, значения которых нужно вывести.
Временные таблицы создаются и обрабатываются иным образом. Создание временной таблицы аналогично созданию обычной таблицы, с той разницей, что имя временной таблицы должно начинаться с символа «#». Временные таблицы сохраняются в служебной базе данных TempDB и автоматически уничтожаются при завершении сеанса пользователя, их создавшего (или командой drop table). Работа с временной таблицей – ввод, редактирование, вывод и удаление данных, происходит аналогично работе с обычными пользовательскими таблицами. Рассмотрим управляющие конструкции, используемые в языке T-SQL: Составной оператор – используется в тех случаях, когда необходимо объединить группу операторов T-SQL в единый блок, воспринимаемый сервером как единое целое. В частности, составной оператор зачастую используется внутри операторов ветвления и цикла. Оператор имеет следующий синтаксис:
BEGIN набор операторов END Оператор ветвления – используется для организации выполнения того или иного набора операторов в зависимости от некоторого условия. Оператор имеет следующий синтаксис: IF логическое_условие Набор операторов ELSE Альтернативный набор операторов Оператор цикла – в языке T-SQL существует только одна разновидность циклических операторов – оператор цикла с предусловием. Оператор имеет следующий синтаксис: WHILE логическое_условие Набор операторов Внутри циклического оператора могут применяться операторы break и continue. Команда break позволяет досрочно выйти из цикла, а команда continue – досрочно начать новый виток цикла. Как правило, обе команды помещают внутри некоторого оператора ветвления. Оператор паузы – waitfor, позволяет организовать задержку исполнения сценария. Внутри данного оператора используются ключевые слова delay – для указания отрезка времени или time – для указания точного времени. Например: WAITFOR delay ’31:00’ – остановит выполнение сценария на 31 минуту WAITFOR time ’12:00’ – остановит выполнение команд до 12 часов. Кроме описанных операторов и команд, в сценариях можно использовать любые команды SQL – для создания, редактирования и удаления объектов базы данных, для выборки, вставки, изменения и удаления данных и т.п.
Вопросы к допуску 1. Что называется SQL-сценарием? 2. Для решения каких задач применяют сценарии? 3. Как хранятся сценарии в MS SQL Server 2000? 4. Как вызвать и запустить на исполнение сценарий в MS SQL Server 2000? 5. Что называется пакетом? Для чего применяют пакеты? 6. Как разделить сценарий на пакеты? 7. Какие ограничения накладываются на пакеты в MS SQL Server 2000? 8. Какими недостатками обладают сценарии?
Контрольные вопросы 1. Опишите процесс создания сценария в MS SQL Server; 2. Как объявлять и инициализировать переменные в сценариях? 3. Как создавать временные таблицы? 4. Опишите организацию процесса вывода данных из переменных и из временных таблиц; 5. Какие группы операторов можно использовать в выражениях T-SQL? 6. Опишите операторы логического набора операторов T-SQL;
7. Что такое составной оператор? Какие команды применяются для создания составного оператора? 8. Как организовать процесс ветвления средствами T-SQL? 9. Опишите оператор выбора, используемый в T-SQL? 10. Как организуют циклический процесс в T-SQL? 11. Какие команды применяют для досрочного завершения цикла? Приведите пример; 12. С помощью какой команды можно приостановить выполнение сценария?
Лабораторная работа №6: Задание:
Теоретический материал: Хранимые процедуры являются усовершенствованным вариантом sql-сценариев. Сценарии позволяют решать разнообразные прикладные задачи, но они обладают рядом следующих недостатков:
Рассмотренные недостатки сильно понижают пользу от использования сценариев и заставляют задуматься об их усовершенствовании. Хранимые процедуры являются результатом усовершенствования sql-сценариев и лишены описанных недостатков.
Хранимую процедуру можно определить как именованный sql-сценарий, хранящийся на сервере. В хранимые процедуры можно передавать параметры, кроме того, хранимая процедура способна возвращать параметры. Это позволяет разрабатывать гибкие сценарии, состоящие из последовательно выполняемых хранимых процедур. Средства безопасности MS SQL Server 2000 позволяют выдать пользователю или приложению право на исполнение хранимой процедуры. Все сказанное выше позволяет с уверенностью говорить о том, что хранимые процедуры являются мощным инструментом обработки данных. В MS SQL Server 2000 хранимые процедуры разделяются на 5 видов:
В данной лабораторной работе мы будем рассматривать локальные хранимые процедуры. Для создания таких процедур используется команда create proc, имеющая следующий синтаксис: CREATE PROC имя_процедуры
[список параметров] [WITH RECOMPILE | ENCRYPTION] AS тело процедуры GO Рассмотрим команду более подробно. После ключевых слов create proc необходимо указать имя процедуры. Имена процедур подчиняются стандартным правилам именования объектов в MS SQL Server 2000. Далее можно указать список параметров передаваемых в процедуры и возвращаемых процедурой. Параметры перечисляются через запятую и имеют следующий синтаксис: имя тип [= значение_по_умолчанию] [OUTPUT] Имя параметра задается так же, как и имена переменных. Тип данных также аналогичен тем, которые могут принимать переменные. Необязательными являются присваивание значения по умолчанию и ключевое слово output. Если параметру присвоено значение по умолчанию, то в случае вызова хранимой процедуры без этого параметра ему будет присвоено значение, присвоенное по умолчанию. В качестве значений по умолчанию разрешается использовать только константы. Ключевое слово output используется, когда необходимо возвратить измененное значение параметра хранимой процедуры. Опции with recompile и with encryption являются необязательными и используются соответственно, если нужно запретить кэширование плана выполнения процедуры (не рекомендуется т.к. это снизит производительность) и если нужно шифровать код хранимой процедуры. Тело процедуры представляет собой набор команд языка T-SQL. Для завершения команды create proc используется оператор go (т.к. данная команда может быть единственной в пакете). Рассмотрим несколько примеров:
Create proc building_info @type varchar (9) as select bldg_id, address, status from builling where bldg_type = @type go
В данном примере хранимая процедура принимает параметр @type и выводит все сведения о зданиях указанного типа. Для выполнения процедуры можно выполнить команду: Exec building_info ‘Магазин’ В результате будут возвращен набор строк, содержащий сведения об строящихся магазинах. Рассмотрим еще один пример: Create proc worker_info @id char(5) = null output @name varchar(30) = null output @skill varchar (10) output @rate smallmoney output AS If @id is not null Select @name = wrkr_name, @skill = skill_type, @rate = h_rate From worker Where wrkr_id = @id Else Select @id = wrkr_id, @skill = skill_type, @rate = h_rate From worker Where wrkr_name = @name Go Приведенная хранимая процедура позволяет осуществить поиск сведений о рабочем либо по его индивидуальному коду, либо по его имени. Приведем пример использования данной процедуры: Declare @id char(5), @name varchar(30), @skill varchar (10), @rate smallmoney Set @name = ‘Сидоров И.П.’ Exec worker_info @name, @id output, @skill output, @rate output Select [Код работника] =@id,[Специальность]= @skill, [Оплата]= @rate Результатом выполнения приведенного кода будет вывод сведений о работнике по имени «Сидоров И.П.».
Вопросы к допуску
Контрольные вопросы
Лабораторная работа №7: Задание:
Теоретический материал: Триггерами называются хранимые процедуры, связанные с таблицами или представлениями и автоматически выполняемые при операциях вставки, изменения и удаления данных. Триггеры всегда связаны с некоторой конкретной таблицей или представлением. Триггеры используют для контроля целостности информации, хранящейся в таблице. При проектировании таблиц контроль целостности производится путем введения ограничений уровня таблицы. Однако существуют ситуации, когда применения ограничений оказывается недостаточно: · Если необходимо каскадное изменение через связанные таблицы; · Если база данных не нормализована и требуется автоматическое обновление избыточных данных; · Если необходимо сверить значение из одной таблицы с неидентичным значением из другой таблицы; · Если необходимо произвести обработку ошибок и организовать вывод пользовательских сообщений. Во всех этих ситуациях применяются триггеры, т.к. функциональность ограничений не позволяет разрешать данные ситуации. В MS SQL Server 2000, триггеры классифицируют по 2-м признакам: по поведению и по типу операции, на которую они реагируют. По поведению различают два вида триггеров – after и instead of. По типу операции триггеры делятся на insert trigger, update trigger и delete trigger Триггеры типа after выполняются после того, как была выполнена запустившая их операция. Этот вид триггеров является стандартным триггером для MS SQL Server 2000. Данные триггеры можно связывать только с таблицами базы данных. Можно назначить несколько последовательно выполняемых триггеров на одну и ту же команду (insert, update или delete). Триггеры типа instead of выполняются вместо запустивших их операций. Фактически, вместо запроса пользователя исполняется тело триггера. На каждую из операций можно назначить только один триггер данного типа, но зато их можно связывать не только с таблицами, но и с представлениями. На практике, триггеры этого типа применяют для обработки ошибок. Для создания триггеров в T-SQL применяют кома нду create trigger, которая имеет следующий синтаксис: CREATE TRIGGER имя_триггера ON имя_таблицы тип_триггера запускающая_операция AS тело триггера GO В команде обязательно требуется указать имя триггера и, после ключевого слова on имя таблицы (для instead of триггеров можно указать имя представления), с которой будет связан триггер. Далее требуется указать тип триггера – after ( можно также использовать ключевое слово for) или instead of и операцию, которая запустит триггер. Один и тот же триггер может запускаться разными операциями, в этом случае их перечисляют через запятую. После ключевого слова as следуют операторы T-SQL, составляющие тело триггера. Для завершения создания триггера выполняем команду go. В процессе работы может понадобиться изменить триггер. Для этого используется команда alter trigger, которая имеет такой же синтаксис, как и команда create trigger. Фактически, в T-SQL, изменение триггера эквивалентно написанию его заново. Если возникает необходимость удалить триггер, используется команда drop trigger имя_триггера.
Выясним, как работает триггер. При вызове триггера, MS SQL Server 2000 создает две специальные таблицы – inserted и deleted. Эти таблицы создаются отдельно для каждого триггера и имеют режим «только для чтения». При вызове операции вставки данных (insert), таблица inserted содержит вставленные пользователем строки, а таблица deleted пуста. При вызове операции удаления (delete) ситуация противоположна – inserted пуста, а deleted содержит строки, удаленные пользователем из таблицы. При вызове операции обновления (update) задействуются обе таблицы. В таблице deleted содержатся данные, которые пользователь собирается изменить, а в таблице inserted содержатся обновленные данные. При своей работе триггер анализирует данные, хранящиеся в таблицах inserted и deleted для принятия решения о фиксации или откате транзакции. Достаточно часто на практике возникают ситуации, когда необходимо выяснить, в каком именно столбце (или столбцах) были произведены изменения. Язык T-SQL предоставляет функции update (имя_столбца) и column_updates (маска) для решения этой задачи. Первая из этих функций - update (имя_столбца) позволяет в явном виде ввести имя некоторого столбца и возвращает true, если в нем были произведены вставка или обновление данных. Для выполнения подобной проверки для нескольких столбцов, используется функция column_updated, принимающая в качестве параметра битовую маску. Для первых 8-ми столбцов маска формируется следующим образом (Таблица1):
Таблица 1
На практике для реализации проверки применяют оператор битового and, данной внутри функции. Рассмотрим пример:
If (column_updates() & 40) = 0
В данном примере число 40 можно разложить на 32 + 8. Эти маски соответствуют шестому и четвертому столбцам. Таким образом, условный оператор с помощью функции column_updates проверяет, были ли внесены изменение и в 4, и 6 столбцы. Если бы потребовалось проверить были ли внесены изменения в хотя бы в один из этих столбцов, знак равенства заменился бы знаком «больше»: If (column_updates() & 40) > 0
Следует заметить, что в таблицах часто содержится более восьми столбцов. Возникает вопрос: «Как проверить остальные столбцы?» Дело в том, что битовая маска одинакова для каждой восьмерки столбцов и для всех восьмерок, кроме первой необходимо указывать ее порядковый номер. Например, для второй восьмерки проверка 10 и 12 столбцов будет выглядеть следующим образом: If (column_updates()&10, 2) > 0
В теле триггера можно использовать практически те же самые операторы, что и в хранимых процедурах, т.к. триггеры являются специальной разновидностью хранимых процедур. Однако, следует отметить, что в теле триггера нельзя создавать новые объекты – таблицы, представления и т.п. Вопросы к допуску 1. Что называется триггером? 2. Для чего используют триггеры? 3. С какими объектами базы данных можно связать триггеры? 4. В каких случаях следует применять ограничения и нет необходимости в применении триггеров? 5. В каких случаях следует применять триггеры вместо ограничений? 6. Как осуществляется запуск триггера? Контрольные вопросы 1. Какие виды триггеров используются в MS SQL Server 2000? 2. Охарактеризуйте after-триггеры; 3. Охарактеризуйте instead of триггеры; 4. Какие операции способны спровоцировать запуск триггера? 5. Опишите синтаксис команды, создающей триггер; 6. Как изменять триггер средствами T-SQL? 7. Как удалить триггер средствами T-SQL? 8. Каким образом можно временно отключить триггер, не удаляя его? 9. Для чего используется таблица inserted? Какие данные хранятся в ней и когда? 10. Для чего используется таблица deleted? Какие данные хранятся в ней и когда? 11. Приведите пример использования функции Update(); 12. Каким образом строится маска в функции Column_updates()? 13. Как использовать функцию column_updates() для проверки изменений в столбцах таблицы? 14. С помощью какой функции можно организовать вывод пользовательских сообщений?
Лабораторная работа №8: Задание:
Теоретический материал: В данной лабораторной работе будет рассмотрена задача управления учетными записями пользователей. Хотя эта задача непосредственно не входит в процесс проектирования, разработчик может при создании базы определить группы пользователей и разграничить доступ к базе данных. Задача управления учетными записями и разграничения доступа, является одной из множества задач реализации защиты базы данных. Фирмой Microsoft предлагается шестиуровневая схема защиты данных:
В лабораторной работе мы будем рассматривать пятый уровень защиты. Защита в MS SQL Server 2000 реализуется посредством аутентификации, авторизации, аудита и шифрования. Под аутентификацией понимается предоставление доступа к MS SQL Server 2000. В процессе аутентификации необходимо выяснить личность пользователя (по его учетной записи), желающего получить доступ к серверу и проверить, имеет ли он на это право. MS SQL Server 2000 предлагает два типа аутентификации:
После того, как пользователь получил доступ к серверу, ему необходимо пройти авторизацию. Под авторизацией понимается процесс выяснения того, какие именно действия может выполнять данный пользователь на сервере. В MS SQL Server 2000 авторизация реализуется посредством разрешения и ролей. Разрешения позволяют выполнять определенные действия и делятся на два вида: разрешения на работы с объектами и разрешения на выполнение операторов. Разрешения на работу с объектами могут выдаваться для каждого объекта базы данных отдельно. В данную группу входят следующие разрешения:
В группу разрешений на работу с операторами входят create и b ackup, соответственно разрешающие создание новых объектов и резервное копирование базы данных. Работа с разрешения ми происходит следующим образом. Можно выдавать, отменять или запрещать разрешения. В T-SQL для этого используются операторы grant, revoke и deny, соответственно. Находясь в среде Enterprise Manager, можно работать с разрешениями более простым и наглядным способом. Необходимо выбрать нужный объект и вызвать через контекстное меню его свойства. В открывшемся окне выбрать команду permission (разрешения) и с помощью мыши явно указать какие разрешения должны быть выданы, какие сняты и на что налагается запрет. Механизм разрешений является достаточно мощным, однако для обеспечения работы некоторого пользователя иногда приходится выдавать множество разрешений для множества объектов. Когда пользователей много, а разрешенные им действия одни и те же, появляются мысли об автоматизации разграничения доступа. В MS SQL Server 2000 данная задача решается посредством механизма ролей. Под ролью понимается набор разрешений, предназначенный для решения некоторой задачи. Таким образом, имея множество пользователей, выполняющих одинаковые действия с базой данных можно оформить необходимые разрешения в виде роли и выдавать разрешения, включая пользователей в эту роль. MS SQL Server 2000 содержит некоторое количество предопределенных ролей, и предоставляет возможности для создания собственных ролей. Предопределенные роли делятся на роли уровня сервера и роли уровня базы данных. Первые из них предназначены для решения административных задач, касающихся всего сервера в целом. В эту группу входят роли: sysadmin, serveradmin, securityadmin, setupadmin, processadmin, dbcreator, bulkadmin. Группа ролей уровня базы данных предназначена для решения задач в конкретной базе данных. Прежде чем включить пользователя в одну из таких ролей, необходимо указать к каким базам данных он имеет доступ. Это можно выполнить, вызвав окно свойств учетной записи пользователя. Рассмотрим роли, входящие в эту группу:
Для того, чтобы включить пользователя в роль достаточно дважды щелкнуть мышкой по имени роли и в появившемся диалоговом окне добавить учетную запись пользователя.
Вопросы к допуску
Контрольные вопросы
Рекомендуемая литература
1. Глушаков С.В., Ломотько Д.В. Базы данных: Учебный курс М., АСТ, 2000.-504 с., илл. 2. К.Дж. Дейт Введение в системы баз данных, М: СПб.: «Издательский дом «Вильямс»», 2000. – 848 с. 3. В.Корнеев, А.Гареев, С.Васютин, В.Райх «Базы данных. Интеллектуальная обработка информации» - М.: «Ноллидж», 2000. – 352с. 4. Microsoft Press «Проектирование и реализация баз данных Microsoft SQL Server 2000. Учебный курс MSSE»: Пер. с англ. – М.; Издательско-торговый дом «Русская редакция», 2001. – 704с.; 5. Райордан Р. Основы реляционных баз данных, М.: Русская редакция, 2001-384 с. 6. Хэнсен Г., Хэнсен Д. Базы данных: разработка и управление: Пер. с англ. – М: ЗАО «Издательство БИНОМ», 1999. – 704с 7. Воронов А.В. СУБД: методическое пособие по выполнения практических работ, Петропавловск: СКГУ им. М. Козыбаева, 2005, 34с.
Содержание: Введение------------------------------------------------------------- 3 Лабораторная работа №1: «Логическое проектирование»------- 4 Лабораторная работа №2: «Физическое проектирование: построение схемы данных» 15 Лабораторная работа №3: «Создание таблиц базы данных в MS SQL Server 2000» 22 Лабораторная работа №4: «Создание представлений в MS SQL Server 2000» 28 Лабораторная работа №5: «Разработка SQL-сценариев»------- 33 Лабораторная работа №6: «Разработка хранимых процедур»- 39 Лабораторная работа №7: «Создание триггеров»--------------- 45 Лабораторная работа №8: «Создание учетных записей. Управление разрешениями» 50 Рекомендуемая литература---------------------------------------- 55
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|