Содержание
- 2. Хранимая процедура создаётся оператором CREATE PROC[EDURE]: CREATE PROC [ EDURE ] [ .] [;номер] {[ [VARYING]
- 3. - идентификатор (без @)может иметь длину более 128 символов. Процедура может быть квалифицирована именем схемы, но
- 4. - идентификатор, начинающийся с символа @ . Максимальное число параметров – 2100. Параметры локальны в процедуре.
- 5. - Допустимы все типы, включая text, ntext и image. Тип cursor может быть использован только для
- 6. - если значению по умолчанию задано для параметра, то к ней можно обратиться, не указывая значения
- 7. Процедуры могут быть вложенными, в том смысле, что одна процедура вызывает другую. Текущий уровень вложенности возвращается
- 8. Пример процедуры, выполняющей удаление из базы данных «Склад» всего, что относится к уровню классификации товара @Tov_ID.
- 9. else begin -- это не товар, а уровень классификации -- пройдем по всем его сыновьям в
- 10. Хранимые процедуры могут возвращать результат своей работы четырьмя способами: 1) с помощью выходных параметров 2) код
- 11. Пусть, например имеется процедура: CREATE PROCEDURE MyProc AS select 1,2,3 select 3,4,5,6 Ниже изображен результат выполнения
- 12. Процедура вызывается оператором Exec[ute]. Синтаксис вызова процедуры: EXEC[UTE] [ @return_status = ] имя процедуры [параметр [output]]
- 13. Оператор EXECUTE может выполнить текст Transact SQL, находящийся в символьной строке или символьной переменной. Например: exec
- 14. @return_status – переменная, которой присваивается возвращаемое значение. Переменная должна быть объявлена в пакете, вызывающем процедуру. Процедура
- 15. Триггеры Триггер – это специфический тип процедуры, которая вызывается автоматически, когда выполняются операции INSERT, UPDATE, DELETE.
- 16. Целями, которые преследует триггер, могут быть: отслеживание ссылочной и семантической целостности базы данных Выполнение действий, обеспечивающих
- 17. CREATE TRIGGER ON { [ WITH APPEND ] AS
- 18. имя таблицы или view – триггер будет вызван при попытке внесения изменений в указанную таблицу или
- 19. after – указывает, что триггер должен стартовать после того, как действия оператора, вызвавшего триггер, успешно завершены.
- 20. В триггере доступны две дополнительные таблицы – INSERTED и DELETED, которые содержат вставленные и удалённые записи
- 21. Триггер может оценить выполняемые изменения таблицы как недопустимые и возбудить состояние ошибки с передачей сообщения клиенту
- 22. Пример: RAISERROR(' Удаление товара %s недопустимо, так как имеются данные о продажах ', 16,1, @TovarName) Здесь
- 23. severity – уровень серьёзности ошибки. Уровни серьёзности от 0 до 18 могут быть использованы любым пользователем.
- 24. state – произвольное целое от 1 до 127. Может быть использовано как признак, позволяющий определить место,
- 25. Триггеры instead of Для каждой из операций INSERT, DELETE, UPDATE для таблицы или view может быть
- 26. Рассмотрим пример выполнения операции INSERT для view TovarWithCurPrice, содержащего данные товара и его текущую цену: CREATE
- 27. При выполнении операции INSERT для этого view должна быть добавлена одна запись в таблицу Tovar и
- 28. while 1=1 begin fetch next from ps into @TovarName, @IsTovar, @Amount, @MeasUnit_ID, @Parent_ID, @Price, @DateStart if
- 29. Оператор INSERT, выполняющий вставку записи(ей) во view обязан предоставить значения всех полей view, которые не допускают
- 30. Обратите внимание на то, что приведённый оператор INSERT предоставляет значение для автоинкрементного поля Tovar_ID. Триггер не
- 31. Функции, возвращающие скаляр, создаются оператором CREATE FUNCTION, имеющим следующий синтаксис: CREATE FUNCTION [ .] ( [
- 32. параметр. Имена параметров должны удовлетворять соглашения об именах переменных. Параметру может быть дано значение по умолчанию,
- 33. - тип возвращаемого значения может быть любым, кроме text, ntext, image. - опции ENCRYPTION – текст
- 35. Пример 2. Вычислить суммарную стоимость товара @Tovar_ID по текущей цене. CREATE FUNCTION dbo.TovarCost (@Tovar_ID int) --
- 36. Пример 3. Найти цену товара на текущую дату. CREATE FUNCTION dbo.CurCost (@Tovar_ID int) -- возвращает текущую
- 37. select @curDate=CurDate from CurrentDate -- здесь CurrentDate - представление declare @Price float select @Price=Price from PriceList
- 38. Функция, возвращающая скаляр может входить как операнд в любое выражение, например: set @x=@Amount*dbo.CurCost(25)
- 39. Функции, возвращающие таблицу Функции, возвращающие таблицу, создаются оператором CREATE FUNCTION, имеющим следующий синтаксис: CREATE FUNCTION [
- 40. Пример. Получить состояние склада на дату @d. Возвращаемая таблица должна иметь структуру (Tovar_ID, TovarName, Amount) CREATE
- 41. BEGIN insert into @x(Tovar_ID,TovarName,Amount) select Tovar_ID,TovarName, t.Amount- coalesce((select sum(Amount) -- вычесть все поступления from Nakl n,SostNakl
- 42. Обращение к функции, возвращающей таблицу, имеет вид такой же, как и к любому другому источнику данных,
- 43. Уровни изоляции При условии работы многих пользователей с одной и той же базой данных они могут
- 44. Последовательность действий может быть такой: Транзакция 1 (Т1) читает сумму на счёте (5 рублей) Транзакция 2
- 45. Как видим, обновление выполненное транзакцией Т1 потеряно. Это произошло потому, что транзакция Т2 читала данные незавершённой
- 46. Для изоляции одной транзакции от другой используются блокировки. В приведенном примере транзакция Т1 должна была блокировать
- 47. Таким образом, в процессе разработки приложения, программист должен иметь в виду две противоречащих друг другу цели:
- 48. Как правило, программист не указывает какие данные и как следует блокировать (хотя опытные программисты имеют возможность
- 49. В стандарте ANSI SQL-92 [MS, ANSI] определяются четыре уровня изолированности. Незафиксированное (грязное) чтение (READ UNCOMMITED). Зафиксированное
- 50. Они определяются с помощью определения сериализуемости и трех запрещенных последовательностей операций, названных феноменами: 1) грязное чтение,
- 51. Грязное чтение. t1 изменяет строку данных. t2 читает эту строку t1 выполняет откат. Теперь t2 работает
- 52. Иллюзии. (Фантомы) t1 выбирает множество строк, удовлетворяющих некоторому критерию поиска. 2. t2 добавляет новую строку тоже
- 53. Уровень изоляции транзакций устанавливается оператором set transaction isolation level. Синтаксис: (Уровень sql server 2000) SET TRANSACTION
- 54. Аргументы: READ COMMITTED – Указывает, что на время чтения удерживается блокировка, чтобы избежать грязного чтения. Возможны
- 55. Для изоляции транзакций друг от друга используются блокировки. Транзакция может установить блокировку на тот или иной
- 56. Оператор BEGIN TRANSACTION Отмечает стартовую точку явно объявляемой транзакции. Выполнение оператора BEGIN TRANSACTION увеличивает счетчик числа
- 57. Если опция IMPLICIT_TRANSACTIONS установлена в on, SQL Server неявным образом открывает транзакцию при выполнении каждого из
- 58. Блокировки Для изоляции транзакций друг от друга используются блокировки. Транзакция может установить блокировку на тот или
- 60. Блокировка для обновления (Update). Типичная ситуация при модификации данных заключается в следующем. Транзакция Т1 читает данные,
- 61. Действительно, после того, как обеим транзакциям удалось установить взаимно совместимые блокировки типа S, они будут бесконечно
- 62. Действительно, после того, как обеим транзакциям удалось установить взаимно совместимые блокировки типа S, они будут бесконечно
- 63. Блокировка Intent. Блокировка типа «намерение» означает, что SQL Server намерен выполнить блокировку части ресурса. Например, блокировка
- 64. Установка такой блокировки преследует цель помешать другой транзакции установить блокировку типа X на таблицу. Блокировка типа
- 67. Здесь о разновидностях блокировок Оператор COMMIT TRANSACTION Помечает конец успешной транзакции, неявной или объявленной пользователем. Если
- 68. Синтаксис COMMIT [TRAN[SACTION] [ transaction_name | @tran_name_variable ] ] Аргументы: transaction_name – игнорируется SQL Server. Используется
- 69. Оператор ROLLBACK TRANSACTION Выполняет откат к началу транзакции или к savepoint. О savepoint не рассказываю Синтаксис:
- 70. Системные таблицы Системные таблицы в каждой базе данных Вся информация о базе данных хранится в ней
- 71. К системным таблицам неприменимы операторы insert, update, delete. Системные таблицы изменяются, когда выполняются операторы create, drop,
- 72. Таблица sysobjects Таблица содержит по одной строке для каждого объекта в базе данных. Объектами являются, например,
- 74. Таблица syscolumns Содержит по одной строке для каждого поля в таблице или view и по одной
- 76. --Функция возвращающая размер поля в байтах CREATE FUNCTION dbo.k_sysFieldWidth (@Table sysname, @Column sysname) RETURNS int AS
- 77. Список таблиц, содержащих поле @FieldName CREATE FUNCTION dbo.k_sys_ListOfTablesWithField(@FieldName sysname) RETURNS @x table(TableName sysname) as BEGIN insert
- 79. Скачать презентацию