Transact-SQL

Основные данные о работе

Версия шаблона

1.1

Филиал

Ульяновский

Вид работы

Курсовая работа

Название дисциплины

Базы данных

Тема

Transact-SQL

Фамилия студента

Кузнецов

Имя студента

Кирилл

Отчество студента

Валерьевич

№ контракта

05300070602012

Файл титульного листа



 




Содержание

Введение………………………………………………………………………………….. 3

1. Управляющие конструкции transact-sql……………………………………………... 4

1.1 Команда группировки ………………………………………………………………. 4 

1.2 Команды программирования transact-sql ………………………………………….. 4

2. Типы данных…………………………………………………………………………... 8

2.1 Таблица systypes……………………………………………………………………... 8

2.2 Числовые типы данных……………………………………………………………... 8

2.3  Строковые типы данных	………………………………………………………….. 11

3. Типы  инструкций……………………………………………………………………. 13

3.1 Инструкции языка определения, управления и обработки данных……………... 13

3.2 Создание объектов и управление защитой……………………………………….. 15

3.3 Логические операторы, инструкции языка определения……………………….... 19

Заключение……………………………………………………………………………….22

Глоссарий……………………………………………………………………………….. 24

Список используемой литературы…………………………………………………….. 23

Приложение А…………………………………………………………………………... 24

Приложение В…………………………………………………………………………... 25


Введение

Структурированный язык запросов SQL (Structured Query Language) был разработан в 1970 г. корпорацией IBM как язык управления реляционными базами данных. До него и после него были попытки создания альтернативных языков, но стандартом стал именно SQL. Практически все производители систем управления базами данных используют в своих продуктах ту или иную модификацию SQL. С 1970 г. Было разработано немало версий этого языка, часто не совместимых друг с другом. В результате  в 1992 г. американским национальным институтом стандартов (American National Standard Institute-ANSI) был разработан стандарт SQL – 92, описывающий поведение сервера и регламентирующий основные правила работы. Целью разработки этого стандарта было, в частности, уменьшение несовместимости различных вариантов SQL.

Однако, несмотря на все усилия добиться единого стандарта, каждый из производителей использует и развивает свою модификацию SQL. В SQL Server 7.0 реализован вариант Transact-SQL, поддерживающий большинство возможностей стандарта ANSI SQL-92, а также ряд дополнений, увеличивающих гибкость и мощность языка. Transact-SQL широко используется не только в продуктах Microsoft, но и в приложениях независимых разработчиков.

Transact-SQL является основой SQL Server 7.0, реализуя простые, но в то же время мощные методы доступа к данным. Администратор может сконфигурировать сервер таким образом, что пользователям не нужно будет явно указывать начало и конец транзакций. Сервер сам позаботится об обеспечении целостности данных. Для профессиональной работы с SQL Server 7.0 необходимо понимать механизмы работы Transact-SQL и уметь успешно применять их на практике.

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




Основная часть

1 Управляющие  конструкции TRANSACT-SQL



1.1 Команда группировки

 

Рассмотрим различные конструкции Transact-SQL, без которых невозможно написание эффективных алгоритмов.

BEGIN…END

С помощью этой конструкции выполняется группировка двух и более команд в единый блок. Сгруппированные команды воспринимаются интерпретатором Transact-SQL как один оператор. Подобная группировка требуется для конструкции поливариантных ветвлений, условных и циклических конструкций. Begin ставится в начале блока. После него располагается одна или несколько команд. Завершается блок ключевым словом END:

     BEGIN

                 SELECT * FROM authors

                 SELECT * FROM titles

                 PRINT ‘Дата : ‘+ CAST (GETDATE () AS char)

     END



1.2 Команды программирования Transact-SQL



     Некоторые команды Transact-SQL не должны выполнятся вместе с другими командами, поэтому их включение в конструкцию BEGIN…END совместно с другими командами не допускается. К таким командам относятся команды резервного копирования, изменения структуры таблиц, хранимых процедур и им подобные.

IF…ELSE

Часто определённая часть программы должна выполнятся только при некотором условии. Например, изменять строки в таблице имеет смысл только в том случае, если они имеются. Конструкция IF…ELSE позволяет выполнять указанную команду только при соблюдении логических условий.

В отличие от большинства языков программирования, в конструкции IF…ELSE языка Transact-SQL не используется ключевое слово THEN. Кроме ТОО, в некоторых языках программирования конструкция IF…ELSE предусматривает включение множества команд. В Transact-SQL позволено указание не более одной команды. Если требуется выполнить более одной команды, необходимо воспользоваться конструкцией BEGIN…END.

CASE…END

Эта конструкция часто используется для замены множества одиночных или вложенных конструкций IF…ELSE. Конструкция CASE…END возвращает результат, который можно использовать в качестве переменной в других выражениях. При этом она рассматривается как функция. 

     CASE input_ expression

     WHEN {when_ expression | Boolean_ expression}

     THEN result_ expression

     […n]

     [ELSE else_ result_ expression] 

     END

Конструкцию CASE…END можно также использовать непосредственно в запросе.

COALESCE

Эта конструкция возвращает первое нулевое значение. Её синтаксис таков:

     COALESCE (expression […n])

Внутри скобок в этой конструкции через запятую перечисляется множество значений. Конструкция COALESCE может быть представлена в виде конструкции CASE…END.

WHILE…BREAK & CONTINUE

С помощью это конструкции в Transact-SQL организуется циклы, причём это единственный тип циклов, поддерживаемый Transact-SQL. Во многих языках программирования реализовано два, а то три типа циклов. Например, Delphi поддерживает три типа циклов: FOR…TO, WHILE…DO и REPEAT…UNTIL.

Цикл можно принудительно остановить, если в его теле выполнить команду BREAK. Если же нужно начать цикл заново, не дожидаясь выполнения всех команд в теле цикла, необходимо выполнить команду CONTINUE. После этой команды цикл переходит к проверке логического условия. 

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

1. Первый символ имени объекта должен соответствовать стандарту Unicode Standard 2.0 и быть одним из символов латинского или национального алфавита либо символом «_», то есть не допускается использование в качестве первого символа имени объекта цифр, символов «!», «№», «*» и т.д. Кроме того, для обозначения временных объектов сервер разрешает использование символов «@» (временные переменные или параметры) и «#» (временные таблицы или хранимые процедуры). Временные объекты существуют только в течение сеанса или транзакции, а затем уничтожаются. Для обозначения глобальных временных объектов, к которым могут обращаться все пользователи, Transact-SQL позволяет использовать символы «##». Для обозначения глобальных временных переменных вначале идентификатора указываются символы «@@». Некоторые функции и переменные SQL Server 7.0 начинаются с символов «@@». 

	Остальная часть идентификатора может включать любые символы, определённые стандартом Unicode Standard 2.0, символы национальных алфавитов, десятичные цифры, символы «@», «#» и «_».

	При выборе имени следует убедиться, что оно не является зарезервированным словом (как, например, BEGIN или KILL) и что ещё не существует объекта с таким именем. Transact-SQL не различает регистра, в котором набрано имя, и поэтому считает одинаковыми имена объектов, выбранные в разных регистрах.

	Запрещается использование внутри имени пробелов, круглых скобок и специальных символов «~», «!», «%», «^», «&», «-», «{», «}», «`», «.», «\», и «’». 

	Длина имени объекта не должна превышать 128 символов. Исключение составляют имена временных таблиц, длина имени которых не должна превышать 116 символов.

Для обхода некоторых ограничений можно заключить имена объектов в двойные кавычки или квадратные скобки. В этом случае разрешается использование в имени объекта пробелов, специальных символов, а также употребление зарезервированных слов в качестве идентификаторов. Стандартные имена также могут быть записаны с использованием ограничителей. Идентификаторы, заключённые в двойные кавычки или квадратные скобки, называются ограниченными идентификаторами (Delimited identifiers).

Многие хранимые процедуры и команды Transact-SQL требуют указания в качестве аргумента имени таблицы, колонки, представления или другого объекта. В этом случае имена объектов должны заключаться в одинарные кавычки. Выражение, заключенное в одинарные кавычки, рассматривается как символьная строка. Например, для получения информации о таблице title author базы данных pubs необходимо ввести следующую команду:

EXEC SP _help ‘pubs… title author’

Если же название таблицы не соответствует правилам именования объектов, необходимо заключить имя таблицы в квадратные скобки или двойные кавычки:

EXES SP _help ‘pubs… ” Title author”’

EXES SP _help ‘pubs… [Title author]’

По умолчанию в качестве ограничителя имени можно использовать как двойные кавычки (“), так и квадратные скобки []. Область применения двойных кавычек зависит от соответствующих значений конфигурации сервера. Причём эти установки могут устанавливаться на трёх уровнях: на уровне соединения с помощью команды SET QUOTED _IDENIFIER, на уровне базы данных с помощью хранимой процедуры sp_abortion ‘quoted identifier’ ON | OFF и на уровне сервера.       

2 Типы данных



2.1. Таблица systypes



Тип данных определяет диапазон значений, которые можно сохранить в переменной или колонке таблицы. Набор стандартных типов данных был заметно расширен по сравнению с предыдущими версиями. Теперь поддерживаются 23 встроенных системных типа данных, на основе которых дополнительно может быть создано множество разнообразных пользовательских типов.

Информация о типах данных, как системных, так и пользовательских, хранится в таблице systypes в каждой базе данных. Если в базе данных не создано ни одного пользовательского типа данных, то эта таблица будет содержать 24 строки. Для получения списка типов и их свойств можно использовать следующую команду:

     SELECT * FROM systypes

В результате сервер выдаст таблицу со списком типов, созданных в текущей базе данных, с указанием их свойств. Каждая строка описывает один тип.

Обращаясь к таблице systypes, можно получить информацию о созданных базе типа данных, не прибегая к использованию Enterprise Manager. Для получения информации о конкретном типе данных можно использовать системную хранимую процедуру sp_help:

     EXEC sp_help ‘data_type’



2.2 Числовые типы данных



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

К целочисленным типам данных (общее название – integer) относятся следующие типы данных:

	Int (или integer). Для хранения данных используется 32 бит или 4 байта, что обеспечивает 4 294 967 296 вариантов значений. 31 бит используется для хранения собственно числа, а старший бит предназначен для указания знака. Если этот бит установлен в 1, то число отрицательное. Следовательно, этот тип данных позволяет хранить целые числа в диапазоне от -231 до 231-1, что соответствует интервалу от -2 147 483 648 до 2 147 483 647.

	Smallint. Для хранения данных используется 16 бит, или 2 байта, что обеспечивает 65 536 вариантов значений. 15 бит используется для хранения собственно числа, а старший бит предназначен для указания знака. Следовательно, этот тип данных позволяет хранить  целые числа в диапазоне от -215 до 215-1, что соответствует интервалу от -32 768 до 32 767.

	Tinyint. Этот целочисленный тип занимает всего 1 байт и не содержит отрицательных чисел. Все биты интерпретируются как числовое значение. Тип данных tinyint  позволяет хранить значения в интервале от 0 до 255.

При выборе того или иного типа данных необходимо исходить из физического значения хранимых данных. Например, если в колонке будет храниться количество лет, исполнившееся сотруднику, то лучшим вариантом будет использование типа tinyint, так как  не придётся хранить отрицательные значения и вряд ли человек проживёт более 255 лет.

Числа, в составе которых есть десятичная точка, называется нецелочисленными. Microsoft разделяет нецелочисленные данные на два типа десятичные (decimal) и приблизительные (approximate). 

Десятичные данные физически хранятся не в виде чисел, а в виде последовательности цифр. Для предоставления каждой десятичной цифры обычно используется 4 бита, то есть один байт позволяет хранить две десятичных цифры, или значение от 0 до 99. В то же время, использование байта для представления числа в двоичной форме позволяет хранить значения в диапазоне от 0 до 255. К десятичным типам данных относятся следующие : 

	Decimal [(p [, s])] (или dec) и Numeric [(p [, s])]. Эти два типа практически не различаются, и их можно с успехом взаимно заменять. Эти типы содержат фиксированное количество знаков до и после запятой. При использовании типов decimal и numeric можно задавать значения, лежащие в диапазоне от –(1038-1) до 1038-1. Аргумент p определяет максимально возможное количество десятичных знаков (до и после запятой в сумме). Максимальное значение этого параметра равно 38. Аргумент s определяет количество десятичных знаков после запятой, которое будет храниться в этом типе данных. Это значение может быть равно значению p, но не может превышать его. Если этот аргумент не указан, то по умолчанию используется значение 0, то есть хранение цифр после запятой не допускается.

	     К приблизительным типам данных относят следующие:

	Float [(n)]. Этот тип представляет данные с плавающей запятой. Возможные значения лежат в пределах от -1,79*10308 до 1,79*10308. Значение n определяет количество бит, используемых для хранения мантиссы. Этот параметр определяет точность данных и может принимать значение от 1до 53. Физически тип fioat поддерживает два вида точности: до 7 цифр и до 15 цифр. В первом случае значение n может быть от 1 до 24 и для хранения типа float используется 4 байта. Во втором случае n может принимать значение от 25 до 53 и для хранения типа float используется 8 байт.

	Real. Этот тип данных представляет частный случай типа float со значением аргумента n, равным 24. Для хранения типа real используется 4 байта, и он обеспечивает представление чисел в диапазоне от -3,40*1038 до 3,40*1038.

	Для хранения данных о денежных суммах Transact-SQL предлагает использовать типы данных, дающие хранение до 4 знаков после запятой.

К денежным типам данных относятся: 

	Money. Для данных этого типа отводится 8 байт, что обеспечивает представление чисел в диапазоне от -922  337 203 685 477,5808 до +922 377 203 685 477,5807. Если необходимо хранить данные большей длины, то можно использовать тип decimal или numeric.

	Small money. Это более компактный вариант типа money. Для хранения значений типа smallmoney отводятся 4 байта, что обеспечивает представление чисел в диапазоне от -214 748,3648 до 214 748,3647.

Для хранения информации о дате и времени Transact-SQL предлагает два типа данных, позволяющих одновременно хранить сведения и о дате, и о времени. Нет встроенных типов, позволяющих хранить отдельно информацию только о дате или только о времени. Использование специализированных типов позволяет более гибко управлять данными о времени и проводить с ними различные операции. К временным типам данных относят следующие :

	Datetime. Для предоставления этого типа используется 8 байт. В первых 4 хранится информация о дате. Это значение- своего рода смещение относительно базовой даты. В качестве базовой даты было выбрано 1 января 1753 г. Оставшиеся 4 байта хранят информацию о количестве миллисекунд, прошедших после полуночи данного дня. В итоге тип данных datetime позволяет хранить значения о дате и времени в диапазоне от 1 января 1753 г. до 31 декабря 9999 г. с точностью до 3,33 мс. 

	Smalldatetime. Для представления данных этого типа используется 4 байта. Первые 2 байта используются для хранения информации о дате, а оставшиеся 2 байта - о времени. Тип данных smalldatetime обеспечивает хранение информации о дате в диапазоне от 1 января 1900 г. до 6 июня 2079 г. с точностью до минуты.

	

2.3 Строковые типы данных

	

Бинарные типы данных используются для хранения последовательности двоичных значений большой длины. Большинство типов Transact-SQL позволяют хранить значения длиной до нескольких байт, которые в большинстве случаев представляют физические характеристики объектов. В бинарных типах данных можно хранить любые значения, начиная от текста и заканчивая исполняемым кодом программы. Бинарные типы делятся:

	Binary (n). Этот тип данных позволяет хранить до 8000 байт, что стало возможно благодаря изменению внутренней архитектуры системы хранения данных Transact-SQL, а конкретно - размера страницы. Данные типа binary не могут размещаться более чем на одной странице, поэтому их максимальный размер зависит от размера страницы. Значение n определяет количество байт, которое будет хранить.

	Verbinary(n). Этот тип похож на тип binary. Аргумент n (максимальное значение-8000) определяет только максимальную длину, при повышении которой происходит усечение данных.

	Image. Этот бинарный тип позволяет преодолевать ограничение длины в 8000 байтов, характерное для типов binary и varbinary. При использовании этого типа допускается хранение битовых полей длиной до 231-1 (2 147 483 647).

При выборе того или иного типа данных придётся выбирать между производительностью работы системы хранения и свободным пространством в базе данных. Тип данных image стоит в стороне от типов binary и varbinary, и его использование оправдано лишь в том случае, если необходимо хранить действительно длинные поля бинарных данных. 

Для хранения текстовой информации используют символьные и текстовые типы данных. Характерное отличие между символьными и текстовыми типами данных заключается в максимальном количестве символов, которое может хранить тот или иной тип данных. К символьным типам относят типы:

	Char. Этот тип данных разрешает хранение набора символов длиной до 8000 знаков. Аргумент n определяет максимальное количество символов, равное 8000. В таблице для хранения значений типа char выделяется указанное количество байт независимо от того, сколько символов было реально сохранено.

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

	Nchar. Поведение сервера при работе с этим типом аналогично работе с char с тем отличием, что тип nchar используется для хранения символов Unicode. Каждый символ Unicode занимает два байта и максимальное   количество символов, которое можно сохранить с использованием этого типа, равно 4000.

	Nvarchar. Аналог Unicode типа данных varchar. Максимальное значение n ограничено величиной 4000. 

Текстовые типы данных так же, как и символьные, позволяют хранить текстовые данные. Они обеспечивают хранение очень большого количества символов – до 2 Гбайт. К текстовым типам данных относятся: 

	Text. Этот тип обеспечивает хранение блоков текста длиной до 231-1 (2 147 483 647) символов.

	Ntext. При работе с большим объёмом текста в формате Unicode используется тип данных ntext, обеспечивающий хранение до 230-1 (1 073 741 823) символов. Хранение данных типа ntext осуществляется теми же методами, что и типов text и image.

Transact-SQL предлагает набор специализированных функций для обработки текстовых данных. Эти функции перечислены в таблице.

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

	Bit. Этот тип данных позволяет хранить один бит и принимает значение 0 или 1. Bit  как нельзя лучше подходит для хранения данных, которые могут принимать только два значения: «YES/NO», «MAN/ WOMAN», «TRUE/FALSE», «ON/OFF» и т. д.

	Timestamp. Этот тип используется в качестве индикатора версии изменения строки в пределах базы данных. С помощью timestamp можно отслеживать последовательность изменений строк как в пределах таблиц, так и в пределах баз данных. 

	Uniqueidentifier. Он используется для хранения глобальных уникальных идентификационных номеров. Значения типа uniqueidentifier занимают 16 байт и могут быть представлены в виде xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, где x представляет одну шестнадцатеричную цифру.

	Sysname. Это пользовательский тип данных, созданный самим Transact-SQL на основе типа данных nvarchar. Тип данных sysname используется для описания имён объектов базы данных, таких как таблицы, колонки, типы данных, логические имена файлов и т. д. 

Нередко бывает выполнить конвертирование значения одного типа в значение другого типа. Наиболее часто выполняется конвертирование чисел в строки и наоборот. Для конвертирования значений числовых типов данных в символьные строки используется специализированная функция STR. Для выполнения других преобразований Transact-SQL предлагает универсальные функции CONVERT и CAST, с помощью которых можно преобразовать значения одного типа в значение любого другого типа, если такое преобразование вообще возможно. Функции CONVERT  и CAST предлагают примерно одинаковые возможности и могут быть взаимозаменяемыми: 

     CAST (ecspression AS data_ type)

     CONVERT (data_ type [(length)], expression [, style])

Аргумент expression указывает величину, которую необходимо конвертировать. Тип, в который необходимо конвертировать данные, определяется аргументом data_type.       



























Типы инструкций



3.1. Инструкции языка определения, управления и обработки данных

		

Все инструкции языка Transact-SQL разделены на три группы, называемые языком определения данных (Data Definition Language, DDL), языком обработки данных (Data Manipulation Language, DML) и языком управления данными (Data Control Language, DCL). Инструкции DDL предназначены для создания баз данных и их объектов, инструкции DLM предназначены для чтения и модификации данных, а инструкции DCL –для защиты данных путём определения разрешений пользователей и ролей.

Основу любой инструкции языка определения данных (DDL) составляет одно из трёх ключевых слов: CREATE, ALTER или DROP. Остальные ключевые слова, входящие в инструкцию, определяют тип объекта и его параметры. Например, для создания в базе данных  Test новой таблицы с информацией о контактах нужно открыть окно Query Analyzer, подключиться к SQL Server, открыть базу данных Test и выполнить следующую инструкцию:

CREATE TABLE Contacts

 (First Name varchar (20), Last Name varchar (30), Phone char (12)).

Основным элементом этой инструкции является ключевое слово CREATE, которое определяет, что в базе данных необходимо создать новый объект. Ключевое слово TABLE указывает тип создаваемого объекта (таблица), а за ним следует имя таблицы и определения её столбцов. Удалить из базы данных таблицу Contacts можно с помощью инструкции DROP TABLE, в которой задаётся только имя таблицы. 

Эти инструкции служат для предоставления, отмены и запрета разрешений на доступ к объектам баз данных SQL Server и разрешений на выполнение инструкций Transact-SQL. Следующая инструкция предоставляет пользователю Cathy разрешение на чтение данных из таблицы Contacts:                                                                                                                 GRANT SELECT ON Contacts TO Cathy 

GRANT означает предоставление разрешения, ключевое слово SELECT указывает, что это разрешение на чтение данных, далее за ключевым словом ON следует имя объекта, на который предоставляется разрешение, а за ключевым словом TO – имя пользователя, которому предоставляется данное разрешение.

В ходе эксплуатации баз данных интенсивнее всего используются инструкции языка обработки данных (DML), поскольку именно с их помощью выполняется чтение, добавление, удаление и изменение данных таблиц SQL Server. Главным отличием DML от двух других подмножеств Transact-SQL является то, что инструкции DML используются не структурами SQL-Server, а для работы с даными. Модификация данных SQL-Server выполняется с помощью инструкций INSERT, DELETE и UPDATE.



3.2 Создание объектов и управление защитой



В отличиe от пользователей баз данных, которые в большинстве случаев выполняют запросы на выборку и модификацию данных, администраторы очень часто создают базы данных и их объекты. Последовательности инструкций, создающих базы данных и наборы их объектов, часто сохраняют в виде сценариев, а затем используют для повторного создания тех же объектов. Пример инструкции, создающей базу данных Test:  

CREATE DATABASE Test

 В этой инструкции могут присутствовать дополнительные параметры, определяющие размер и расположение её файлов, но для создания базы данных со стандартными установками требуется только два ключевых слова CREATE и DATABASE и имя создаваемой базы данных.

После создания базы данных встаёт задача создания её объектов, прежде всего таблиц. Создание таблицы выполняется с помощью инструкции, начинающейся с того же ключевого слова CREATE, за которым следует ключевое слово, определяющее, какой объект вы хотите создать. Однако прежде чем выполнить инструкцию, нужно сообщить SQL Server, с какой базой данных вы хотите работать. Для этого используется инструкция USE. SQL Server Query Analyzer позволяет выполнить эту инструкцию неявно, выбрав базу данных в поле со списком на панели управления. Однако рекомендуется явно включать инструкцию USE в сценарии, особенно если вы их сохраняете для повторного использования. Таким образом, сценарий создания таблицы должен начинаться с инструкции:

USE Test

Введите её в окне Query Analyzer и нажмите клавишу [Enter] для перехода к следующей строке. Затем введите инструкцию CREATE TABLE, указав  в ней имя создаваемой таблицы и список её столбцов. Для удобства чтения инструкций можно отодвигать их фрагменты вправо, чтобы их структура была более наглядной. Вот как должен выглядеть наш сценарий:   USE Test  

CREATE TABLE Contacts

(FirstName varchar (20), LasteName varchar (30), Phone char (12)).

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

Все инструкции, изменяющие свойства баз данных и их объектов, начинаются с ключевого слова ALTER, за которым следует ключевое слово, определяющее тип объекта: DATABASE, TABLE, VIEW, PROCEDURE, TRTGGER или FUNCTION. Инструкции ALTER можно использовать для изменения всей базы данных, представления, сохранённой процедуры и других объектов. Для каждого типа объектов в Transact-SQL имеется своя инструкция ALTER со своим набором опций. Последней задачей языка определения данных является удаление объектов. Эту операцию выполняют инструкции, начинающиеся с ключевого слова DROP. Нельзя удалить базу данных, к которой подключен хотя бы один пользователь, базу данных, в которую в данный момент загружаются данные, или базу данных публикации.

SQL Server поддерживает некоторые типы разрешений на выполнение инструкций SELEKT, UPDATE, INSERT и DELETE. Каждое из этих разрешений для конкретного пользователя или роли может находится в одном из трёх состояний, устанавливаемых инструкциями: GRANT, DENY и REVOKE. Кроме того, разрешения предоставляются на конкретные объекты баз данных. Например, конкретному пользователю может быть предоставлено разрешение на чтение данных конкретной таблицы. Выполнению инструкций DCL обычно предшествует кропотливая работа по проектированию системы защиты баз данных и их объектов. Только когда полностью подготовлен план распределения разрешений между пользователями и ролями баз данных и SQL Server, вы можете подготовить сценарий на языке Transact-SQL, который реализует этот план. Дальнейшие изменения в системе защиты, например, добавление новых пользователей и ролей и изменение их разрешений, должны выполняться в строгом соответствии с планом согласно текущим потребностям предприятия.

Вот так, например, предоставить пользователю Sally разрешение на чтение данных таблицы Contacts:                                                                          

USE Test

GRANT SELECT ON Contacts TO Sally

Эта инструкция будет выполнена только в том случае, если в базе данных имеется таблица или представление с именем Contacts и пользователь с именем Sally.

Если нужно запретить пользователю Sally чтение данных таблицы Contacts, то следует вместо инструкции GRANT поставить инструкцию DENY.

       Выражения в Transact-SQL представляют собой комбинацию идентификаторов, функций, логических и арифметических операций, констант и других объектов. Выражение может быть использовано в качестве аргумента в командах, хранимых процедурах или запросах. 

	Выражение состоит из операндов (собственно данные) и операторов (действия, производимые над операндами). Операнды Transact-SQL делятся на следующие типы:

	Константы. Это постоянные величины, значения которых не могут быть никаким образом изменены. Примеры: 7, 13.64, ‘TextPtr’.

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

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

	Переменная. Это именованная область памяти определённого объёма, в которой хранятся данные. Физически любая переменная есть последовательность из одного или нескольких байт. То, как сервер будет обрабатывать последовательность, представляющую значение переменной, зависит от типа данных, ассоциированного с этой переменной.

	Подзапрос. В качестве выражения можно указать подзапрос, который подготовит соответствующий набор данных. По принципу работы это эквивалентно указанию колонки таблицы, только в случае подзапроса данные не нужно явно «закачивать» в таблицу. Сервер сам сделает всю работу: создаст временную таблицу с необходимой структурой, скопирует в неё выбранные данные и подключит полученный набор данных в качестве выражения.

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

	          Логические операторы предоставляют большие возможность по управлению данными и широко используется при написании запросов и фрагментов программ.

Оператор ALL

     Expr {=|<>|!=|>|>=|!>|<|<=|!<} ALL (subquery)

С помощью оператора ALL выполняется сравнение скалярного выражения со всеми значениями, возвращаемыми подзапросом. Скалярная величина сравнивается с каждым значением, возвращаемым подзапросом. Если логическое условие выполняется для всех возвращаемых подзапросом значений, только тогда всё условие считается выполненным.

Операторы SOME и ANY

     Scalar_ expression {=|<>|! = |>|>= | !>|<|<=| !<} SOME (subquery)

     Scalar_ expression {=|<>|! = |>|>= | !>|<|<=| !<} ANY (subquery)    

С помощью этих операторов можно сравнить скалярную величину со всеми значениями в колонке таблицы. Разницы между использованием операторов ANY и SOME нет. Если хотя бы в одной строке содержится значение, равное скалярной величине, то условие выполняется.

Оператор BETWEEN

     Test_ expression [NOT] BETWEEN begin_ expression AND end_ expression

С помощью этого оператора можно получить ответ на вопрос, лежит ли величина в указанном диапазоне. Исходная величина задаётся аргументом test_ expression. Аргумент begin_ expression задаёт начало диапазона, а аргумент end_ expression – конец диапазона. Оператор BETWEEN можно без труда представить в виде двух операций сравнения:

     Test_ expression>=begin_ expression AND test_ expression<=end_ expression

Оператор EXISTS

     EXSISTS (sudquery)

Этот оператор возвращает значение TRUE, если указанный подзапрос возвращает хотя бы одну строку. В противном случае возвращает значение FALSE.

Оператор IN

     Test_ expression [NOT] IN

     (subquery | expression [….n]) 

С помощью этого оператора можно проверить, соответствует ли выражение test_expression одному из перечисленных выражений или значений, возвращаемых подзапросом. При работе оператор IN можно заменить оператором «=ANY».

Оператор LIKE

     Match_ expression [NOT] LIKE pattern [ESCAPE escape_ character]

С помощью этого оператора можно выполнять сравнение выражения с заданным шаблоном. Пусть, например, вам нужно найти в базе данных всех авторов, номера телефонов которых начинаются на 415. Можно, конечно, сделать это с помощью обычных операций сравнения, вырезая первые три символа и сравнивая их с «415».

Поиск можно легко выполнить с помощью оператора LIKE, в котором допускается использование символов-заменителей. Аргумент match_ expression задаёт исходное выражение, для которого необходимо выполнить проверку. Шаблон для сравнения задаётся с помощью аргумента pattern. Символы заменители: «%», «_», «[]», «[^]». Операнд LIKE позволяет использовать специальный управляющий символ, задаваемый с помощью аргумента escape_ character, который предписывает воспринимать следующий за ним символ, как обычный. 



              3.3 Логические операторы, инструкции языка определения



    Выражения в Transact-SQL представляют собой комбинацию идентификаторов, функций, логических и арифметических операций, констант и других объектов. Выражение может быть использовано в качестве аргумента в командах, хранимых процедурах или запросах. 

	Выражение состоит из операндов (собственно данные) и операторов (действия, производимые над операндами). Операнды Transact-SQL делятся на следующие типы:

	Константы. Это постоянные величины, значения которых не могут быть никаким образом изменены. Примеры: 7, 13.64, ‘TextPtr’.

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

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

	Переменная. Это именованная область памяти определённого объёма, в которой хранятся данные. Физически любая переменная есть последовательность из одного или нескольких байт. То, как сервер будет обрабатывать последовательность, представляющую значение переменной, зависит от типа данных, ассоциированного с этой переменной.

	Подзапрос. В качестве выражения можно указать подзапрос, который подготовит соответствующий набор данных. По принципу работы это эквивалентно указанию колонки таблицы, только в случае подзапроса данные не нужно явно «закачивать» в таблицу. Сервер сам сделает всю работу: создаст временную таблицу с необходимой структурой, скопирует в неё выбранные данные и подключит полученный набор данных в качестве выражения.

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

          Логические операторы предоставляют большие возможность по управлению данными и широко используется при написании запросов и фрагментов программ.

Оператор ALL

     Expr {=|<>|!=|>|>=|!>|<|<=|!<} ALL (subquery)

С помощью оператора ALL выполняется сравнение скалярного выражения со всеми значениями, возвращаемыми подзапросом. Скалярная величина сравнивается с каждым значением, возвращаемым подзапросом. Если логическое условие выполняется для всех возвращаемых подзапросом значений, только тогда всё условие считается выполненным.

Операторы SOME и ANY

     Scalar_ expression {=|<>|! = |>|>= | !>|<|<=| !<} SOME (subquery)

     Scalar_ expression {=|<>|! = |>|>= | !>|<|<=| !<} ANY (subquery)    

С помощью этих операторов можно сравнить скалярную величину со всеми значениями в колонке таблицы. Разницы между использованием операторов ANY и SOME нет. Если хотя бы в одной строке содержится значение, равное скалярной величине, то условие выполняется.

Оператор BETWEEN

     Test_ expression [NOT] BETWEEN begin_ expression AND end_ expression

С помощью этого оператора можно получить ответ на вопрос, лежит ли величина в указанном диапазоне. Исходная величина задаётся аргументом test_ expression. Аргумент begin_ expression задаёт начало диапазона, а аргумент end_ expression – конец диапазона. Оператор BETWEEN можно без труда представить в виде двух операций сравнения:

     Test_ expression>=begin_ expression AND test_ expression<=end_ expression

Оператор EXISTS

     EXSISTS (sudquery)

Этот оператор возвращает значение TRUE, если указанный подзапрос возвращает хотя бы одну строку. В противном случае возвращает значение FALSE.

Оператор IN

     Test_ expression [NOT] IN

     (subquery | expression [….n]) 

С помощью этого оператора можно проверить, соответствует ли выражение test_expression одному из перечисленных выражений или значений, возвращаемых подзапросом. При работе оператор IN можно заменить оператором «=ANY».

Оператор LIKE

     Match_ expression [NOT] LIKE pattern [ESCAPE escape_ character]

С помощью этого оператора можно выполнять сравнение выражения с заданным шаблоном. Пусть, например, вам нужно найти в базе данных всех авторов, номера телефонов которых начинаются на 415. Можно, конечно, сделать это с помощью обычных операций сравнения, вырезая первые три символа и сравнивая их с «415».

Поиск можно легко выполнить с помощью оператора LIKE, в котором допускается использование символов-заменителей. Аргумент match_ expression задаёт исходное выражение, для которого необходимо выполнить проверку. Шаблон для сравнения задаётся с помощью аргумента pattern. Символы заменители: «%», «_», «[]», «[^]». Операнд LIKE позволяет использовать специальный управляющий символ, задаваемый с помощью аргумента escape_ character, который предписывает воспринимать следующий за ним символ, как обычный. 




Заключение

Transact-SQL, на сегодняшний день, является самым распространенным инструментом в разработке баз данных. Освоивший его человек может создавать базы данных и их объекты, предоставлять пользователям доступ к серверу, базам данных и их объектам, создавать различные объекты баз данных, манипулировать данными, оптимизировать работу сервера и многое другое. 

Типы данных определяют представление колонок таблиц, параметров процедур и переменных. В SQL Server помимо предопределенных системах типов данных можно создавать и пользовательские типы, основывающиеся на системных. Более подробно о создании пользовательских типов данных можно ознакомиться в разделе, посвященном хранимой процедуре sp_addtype. В SQL Server все типы данных регистонезависимые, в силу чего недопустимо использование различных пользовательских типов данных, отличающихся только регистром. 

Для имен объектов необязательно быть уникальными в базе данных, например, имена колонок и индексов должны быть уникальными только в пределах таблицы или представления (view), все же имена других объектов должны быть уникальными в пределах базы данных для каждого владельца. Любую колонку или таблицу можно уникально идентифицировать следующим составным именем - имя базы данных, имя владельца, имя таблицы или представления. Промежуточные значения - имя владельца может быть опущено, если это не приводит к конфликтам имен. В случае удаленных хранимых процедур ее имя задается следующим образом: server.database.owner.procedure




Глоссарий

№ п/п

Понятие

Определение

1





2





3





4





5





6





7





8





9





10






Список использованных источников

1



2



3



4



5



6



7



8



9



10




Приложения



.







2