Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


ХП с выходными параметрами




EXEC @имя_переменной=хранимая процедура [, параметр [, параметр…]]

Выполнить ХП с входным параметром

Use aromatherapy

Go

Declare @count int

Exec sp_table_validation

‘oils’,

@count OUTPUT,@full_or_fast=0

Создание ХП

CREATE PROCEDURE имя_процедуры

[список_параметров]

AS

Орераторы_процедуры

Каждый из параметров в [список_параметров] имеет структуру:

@имя_параметра тип_данных [= значение по умолчанию] [OUTPUT]

Пример ХП со значением по умолчанию:

Пример1:

CREATE PROCEDURE fam

@tab int=100

AS

SELECT tn,f,ok FROM bd

WHERE tn = @tab

Выполнение:

Use проба

Go

EXEC fam 18

Пример2:

USE проба

GO

IF EXISTS (SELECT name FROM sysobjects

WHERE name = 'p5' AND type = 'P')

DROP PROCEDURE p5

GO

CREATE PROCEDURE p5

@a1 DEC(7,2)=10,

@as CHAR(15)='см'

AS

PRINT 'Площадь круга при радиусе равном'+

STR(@a1,7,2)+' '+@as

PRINT 'равняется '+STR(@a1*@a1*3.14,8,3)+' '+@as+'^2'

Выполнение:

EXEC p5 1,'М'

Пример ХП с выходным параметром:

CREATE PROCEDURE tt

@a1 char(6)OUTPUT

AS

SET @a1 = '12345'

Выполнение:

declare @a2 char(6)

exec tt @a2 output

select @a2

ХП с возвращаемым значением:

CREATE PROCEDURE tt

AS

DECLARE @dd int

SELECT ot,tn, FROM bd

-- захват ошибки

SET @dd = @@ERROR

RETURN(@dd)

Выполнение:

declare @a1 int

exec @a1=tt

select @a1 as 'код выполнения'

Операторы

Операторы присваивания

DECLARE @v1 datetime, @v2 datetime

SET @v1=Getdate()

SET @v2=@v1+1.5

SELECT ' нач. знач. ' =@v1, ' конеч. знач. ' =@v2

 

Конкатенация

DECLARE @v1 char(15), @v2 varchar(15)

SET @v1= ' Иванов '

SET @v2= ' Петров '

SELECT @v1+ ' и ' +@v2 ' + ' - студенты '

 

Операторы сравнения

=, >, <, <=, >=, <> или!=,!<,!>

IF Datepart(hh, Getdate() > 12 SELECT ‘ Вторая половина дня‘

ELSE SELECT ‘Первая половина дня’

 

Операторы логические

NOT, AND, OR, BETWEEN, ALL, IN, EXISTS, ANY, SOME, LIKE

 

ALL – сравнивает скалярное значение со всеми значениями в наборе, если

условие выполняется для всех значений набора – то TRUE

IF (' Ищенко В.А. ' <>ALL (SELECT f FROM bd))

 

IF (' Moskow ' <> ALL (SELECT f FROM bd))

PRINT ' нет в списке '

ELSE PRINT 'Имеется в списке Ищенко В.А. '

 

ANY, SOME – если условия выполняются хотя бы для одного значения

набора

IF (' Ищенко В.А. ' =ANY (SELECT f FROM bd))

PRINT 'Имеется в списке Ищенко В.А. '

ELSE PRINT ' нет в списке '

 

IN – совпадает выражение хотя бы с одним значением набора (аналог ANY), но позволяет использовать не только скалярные выр. но и др. или служит для ограничения выборки

 

IF (' Moskow ' IN (SELECT city FROM authors))…

 

…WHERE ot in (21,15,200)

 

EXISTS – TRUE, если подзапрос возвращает хотя бы строку, в отличии от

ANY можно задавать множество условий

 

IF EXISTS (SELECT * FROM bd WHERE f= ' Ищенко В.А. ' OR …)

PRINT 'Имеется в списке Ищенко В.А. '

ELSE PRINT ' нет в списке '

 

LIKE – поиск значений по заданному шаблону

% - любое количество символов

_ - подставлен один любой символ

[…] - можно подставить любой символ из указанного набора

^ - допускаются символы не входящие в набор

… WHERE city LIKE ' _Sa% '

… WHERE city LIKE ' _[^a-gh]% '

 

IF EXISTS (SELECT * FROM bd WHERE f LIKE ' Ищенко % ')

PRINT 'Имеется в списке Ищенко '

ELSE PRINT ' нет в списке '

ТРИГГЕРЫ

Триггер – особый вид хранимой процедуры, которую SQL Server выполняет автоматически при использовании команд INSERT, UPDATE, DELETE.

Существуют два вида триггеров: AFTER, INSTEAD OF.

 

Триггер AFTER

Вызывается после выполнения команды и работает только с таблицами. Для каждой команды может быть создано несколько триггеров и каждый триггер может применен

для нескольких команд.

Триггер INSTEAD OF

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

для нескольких команд. Триггер создается для таблиц и представлений. Для каждого действия над таблицей или представления может быть создан только один триггер.

 

Создание триггеров

CREATE TRIGGER имя_триггера

ON

{table | view [WITH ENCRYPTION]

[{AFTER | INSDEAD OF}]

{[DELETE], [INSERT], [UPDATE]}

AS

[{IF UPDATE (colum)

[{AND | OR} UPDATE (column)]

[…n] | IF (columns_update()

{ bitwise_operator} updated_betmask}

(comparison_operator} column_betmask

[…n]

sql_statement […n]}}

 

где:

table | view – имя таблицы или представления к которой прикрепляется триггер

WITH ENCRYPTION – шифровка кода текста триггера

{[DELETE], [INSERT], [UPDATE]}- cоздаваемый триггер будет вызываться при попытке удаления, вставки, изменения данных в указанной таблице

AS – заканчивается определение триггера

IF UPDATE (colum)- разрешает выполнение триггера только при изменении в определенном столбце. Если изменяются несколько столбцов то: UPDATE (a1) OR

UPDATE (a2) AND UPDATE (a3)

IF (columns_update() – возвращает двоичное значение, каждый бит которого соответствует столбцу. Если есть изменение в столбцах, то в этих битах единицы, иначе ноль. Правый бит соответствует левому столбцу таблицы.

Парамеры, применяемые для проверки изменения столбцов:

bitwise_operator – подразумевает указание оператора побайтовой обработки & (побайтовое AND). Можно ограниченно использовать и др. побайтовые операторы.

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

Пример: (columns_update() & 9) Маска для 1 и 4 столбцов

 

comparison_operator – после побитовой обработки проверяется полученный результат, т.е. ставятся оператор =,<,> и т.д.

column_betmask – указывается битовая маска, с которой сравнивается полученное значение. Триггер выполняется, если условие справедливо.

Пример: IF (columns_updated() & 9) = 9 если меняются 1 и 4 столбцы

IF (columns_updated() & 9) > 0 если меняется 1 или 4 столбец или оба

IF (columns_updated() & 9) < 9 если меняется 1 или 4 столбец

 

[…n] – можно выполнять множество проверок, какие столбцы были изменены.

 

sql_statement […n] – команды tsql, выполняемые при вызове триггера

 

Удаление триггеров

DROP TRIGGERS {trigger} [,…n]

 

Пример:

Создадим таблицу:

CREATE TABLE Список

(US char(5), DAT varchar(30), com varchar(30)

 





Поделиться с друзьями:


Дата добавления: 2016-07-29; Мы поможем в написании ваших работ!; просмотров: 399 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Слабые люди всю жизнь стараются быть не хуже других. Сильным во что бы то ни стало нужно стать лучше всех. © Борис Акунин
==> читать все изречения...

2316 - | 2231 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.01 с.