Смекни!
smekni.com

Transact-SQL (стр. 3 из 5)

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

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

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

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

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

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

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

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

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

4 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 Типы инструкций

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

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

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

CREATE TABLE Contacts

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

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

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

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

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

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

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

CREATEDATABASETest

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

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

USETest

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

CREATETABLEContacts

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

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

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

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

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

USE Test

GRANT SELECT ON Contacts TO Sally

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

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

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

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

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

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