SQL

Хранимые процедуры

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

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

Создание

CREATE { PROC | PROCEDURE } procedure_name
[
{ @parameter data_type }
[ VARYING ] [ = default ] [ OUT | OUTPUT ] [READONLY]
] [ ,...n ]
[ WITH [ ENCRYPTION ] [ RECOMPILE ] [ EXECUTE AS ]]

AS
[ BEGIN ] <statements> [ END ]

Вызов

EXEC procedure_name value1, value2 ...

EXEC procedure_name @arg1=value1, @arg2= value2 ...

Система безопасности

Аутентификация пользователя

процесс, при котором пользователь в зависимости от указанного имени пользователя и пароля допускается или нет к установлению соединения с MS SQL Server.

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

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

• sysadmin – может выполнять любые действия на MS SQL Server. По умолчанию сюда входит учетная запись sa и все члены группы администраторов Windows;
• setupadmin – управляет связанными серверами (linked servers) и процедурами, которые выполняются вместе с запуском сервера;
• securityadmin – может создавать и управлять логинами, читать журнал ошибок и создавать БД;
• processadmin – обладает правами управления процессами внутри MS SQL Server, например, член этой роли может завершать задачи, которые выполняются слишком долго;
• dbcreator – разрешено создание и изменение баз данных;
• diskadmin – управляет файлами баз данных: назначает файлы в группы, присоединяет/отсоединяет базы данных и т.д.;
• bulkadmin – позволяет выполнять команду BULK INSERT для вставки сразу большого количества записей в таблицу;

Хранимые процедуры:

• sp_helpsrvrole – возвращает список ролей сервера и описание каждой роли;
• sp_helpsrvrolemember [‘имя роли’] – возвращает список ролей и учетных записей, которым присвоены эти роли;
• sp_srvrolepermission [‘имя роли’] – возвращает список разрешений, присвоенных этим ролям.

Роли БД:

• db_owner – включает в себя права все других ролей базы данных. Пользователь получает права владельца базы.
• db_accessadmin – похожа на серверную роль securityadmin, за исключением того, что ограничена одной базой данных. Она не позволяет создавать новые логины MS SQL Server, но разрешает добавлять новых пользователей в базу данных.
• db_datareader – разрешает выполнение оператора SELECT для всех таблиц базы данных.
• db_datawriter – разрешает выполнять INSERT, UPDATE и DELETE для всех таблиц базы данных.
• db_ddladmin – позволяет добавлять, удалять и изменять объекты в базе данных.
• db_securityadmin – еще одна роль похожая на серверную роль securityadmin. В отличие от db_accessadmin, она не разрешает создавать новых пользователей в базе, но позволяет управлять ролями и членством в ролях, а также правами на доступ к объектам базы данных.
• db_backupoperator – позволяет создавать резервные копии базы данных.
• db_denydatareader – запрещает выполнение SELECT для всех таблиц базы данных.
• db_denydatawriter – запрещает выполнение INSERT, UPDATE и DELETE для всех таблиц базы данных

Разрешения:

Предоставление доступа

GRANT
{ разрешение [,...n] }{ ON таблица | представление [(поле[,...n])]
| ON [хранимая процедура[,...n] }
TO учетная запись [,...n][WITH GRANT OPTION]

Запрещение доступа

DENY
{ разрешение [,...n] }{ ON таблица | представление [(поле[,...n])]
| ON [хранимая процедура[,...n] }
TO учетная запись [,...n][CASCADE]

Неявное отклонение доступа

REVOKE [GRANT OPTION FOR]
{ разрешение [,...n] }{ ON таблица | представление [(поле[,...n])]
| ON [хранимая процедура[,...n] }
TO учетная запись [,...n][CASCADE]

Курсоры

это область в памяти базы данных, которая предназначена для хранения последнего оператора SQL.

В соответствии со стандартом SQL при работе с курсорами можно выделить следующие основные действия:

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

SQL Server поддерживает три вида курсоров:

• курсоры SQL применяются в основном внутри триггеров, хранимых процедур и сценариев;
• курсоры сервера действуют на сервере и реализуют программный интерфейс приложений для ODBC, OLE DB, DB_Library;
• курсоры клиента реализуются на самом клиенте. Они выбирают весь результирующий набор строк из сервера и сохраняют его локально, что позволяет ускорить операции обработки данных за счет снижения потерь времени на выполнение сетевых операций

Категории:

последовательные

прокручиваемые

Команды:

• DECLARE – создание или объявление курсора ;
• OPEN – открытие курсора, т.е. наполнение его данными;
• FETCH – выборка из курсора и изменение строк данных с помощью курсора;
• CLOSE – закрытие курсора ;
• DEALLOCATE – освобождение курсора, т.е. удаление курсора как объекта

Триггеры

вид хранимой процедуры, выполняемый автоматически при возникновении событий языка обработки данных (DML) в базе данных.

События:

INSERT
UPDATE
DELETE

-Каждый триггер привязывается к конкретной таблице
-Все производимые модификации данных рассматриваются как одна транзакция
-Создает триггер только владелец базы данных

Цели:

-Проверка корректности введенных данных и выполнение сложных ограничений целостности данных
-Выдача предупреждений, напоминающих о необходимости выполнения некоторых действий при обновлении таблицы
-Накопление аудиторской информации посредством фиксации сведений о внесенных изменениях и тех лицах, которые их выполнили
-Поддержка репликации

Типы:

Триггеры AFTER выполняются после успешного выполнения вызвавших его команд

Триггеры INSTEAD OF – выполняются вместо выполнения команд

Программирование

При выполнении команд добавления, изменения и удаления записей сервер создает две специальные таблицы:
-inserted
содержит добавленные строки или новые значения строк после выполнения UPDATE
-deleted
содержит удаленные строки или старые значения строк после выполнения UPDATE

XML

это встроенный в SQL Server тип данных

Позволяет создавать -
столбцы таблиц:
CREATE TABLE T
(Col1 int primary key, Col2 xml)
переменные типа xml:
DECLARE @x xml

Методы типа данных XML

Метод query()

Определяет запрос XQuery для экземпляра типа данных xml. Метод возвращает экземпляр нетипизированного xml

Метод value()

Выполняет запрос XQuery к структуре XML и возвращает скалярное значение

Метод exist()

Возвращает значение типа bit, показывающее существует ли указанный элемент xml

Метод nodes()

Результатом метода nodes() является набор строк, содержащий логические копии исходных экземпляров XML. В этих логических копиях контекстным узлом каждого экземпляра строки устанавливается один из узлов, идентифицируемых выражением запроса.

Метод modify()

Изменяет содержимое XML-документа используя XML DML

OPENXML

-разбор документа во внутреннее DOM представление при помощи процедуры sp_xml_preparedocument
-выборка и формирование реляционного набора строк на основе XML-документа

FOR XML

Получение результатов SQL-запроса в формате XML

Транзакции