bsuir.info
БГУИР: Дистанционное и заочное обучение
(файловый архив)
Вход (быстрый)
Регистрация
Категории каталога
Другое [197]
Бухучет [16]
ВМиМОвЭ [4]
ОДМиТА [13]
ОЛОБД [17]
ООПиП [67]
ОС [19]
ПСОД [47]
Форма входа
Логин:
Пароль:
Поиск
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Файловый архив
Файлы » ИСиТвЭ » ОЛОБД

БД 5 семестр ИСиТ
Подробности о скачивании 02.06.2011, 21:46
Задание 10
Создать базу данных «УПРАВЛЕНИЕ ДОГОВОРНОЙ ДЕЯТЕЛЬНОСТЬЮ ПРЕДПРИЯТИЯ». Возможные таблицы: контрагенты, типы договоров, договора, банки, матценности, платежные документы.

1. Разработка модели.
1.1 Определим сущности необходимые для построения модели базы данных и с помощь программы ERwin разработаем логическую модель уровня сущностей

Рис. 1. Модель уровня сущностей.

На этом уровне мы сразу определяем, какие связи будут установлены между сущностями, а именно:
сильная или идентифицирующая связь типа 1 : М
слабая или неидентифицирующая связь типа 1 : М
связь типа М : М
1.2 Теперь дополним все сущности первичными ключами и получим ER диаграмму модели, основанную на ключах.

Рис. 2. Модель, основанная на ключах.
1.3 Дополнив модель всеми необходимыми атрибутами получим диаграмму полной атрибутивной модели.


Рис. 3. Полная атрибутивная модель (логическая)

1.4 Для перехода к физической модели выполним один из трех вариантов трансформы категориальной связи возникшей в результате наследования на уровне логической модели.
Выполним трансформу Supertype-Subtype Identity в результате которой между каждой между родительской и дочерними сущностями установится идентифицирующая связь типа 1 : М. Преобразуем эти связи в не идентифицирующие для того чтобы у одного кортежа родового предка – Договора, могло быть несколько кортежей потомка.
Таким образом получим физическую модель.

Рис. 4. Физическая модель данных.

2 Выполним процесс прямого проектирования. В качестве целевой СУБД выберем Access. Для этого создадим пустой файл формата Access. С помощью команд ERwin выберем созданный файл и выполним процесс прямого проектирования. Для проверки откроем файл и построим схему данных, проанализируем структуру связей:

Рис. 5. Схема БД в Access

3. Напишем SQL-сценарий генерирующий БД и наполняющий её данными.

CREATE DATABASE Dogovora_802301_01 /* SQL-запрос создания базы данных. */
ON PRIMARY
( NAME = ДД_Data,
Filename = 'D:\work\80230101\ДД.mdf',
SIZE = 3Mb,
MAXSIZE = 50mb,
FILEGROWTH = 2Mb /* Шаг приращения на который автоматически */
), /* увеличивается файл. */
FILEGROUP SECONDARY /* Создание группы файлов для хранения данных */
( NAME = ДД2_Data, /* и для хранения информации о базе. */
Filename = 'D:\work\80230101\ДД2.ndf',
SIZE = 2Mb,
MAXSIZE = 70Mb,
FILEGROWTH = 15%
),
( NAME = ДД3_Data,
Filename = 'D:\work\80230101\ДД3.ndf',
SIZE = 2Mb,
FILEGROWTH = 5Mb
)
LOG ON
( NAME = ДД_Log,
Filename = 'D:\work\80230101\ДД_Log.ldf',
SIZE = 1Mb,
MAXSIZE = 10Mb,
FILEGROWTH = 15%
),
( NAME = ДД2_Log,
Filename = 'D:\work\80230101\ДД2_Log.ldf',
SIZE = 512Kb,
MAXSIZE = 5Mb,
FILEGROWTH = 10%
)
GO

USE Dogovora_802301_01
Go

/* Запрос для создания правила, которое будет ограничивать возможные значения в столбце таблицы либо в пользовательском типе данных. */
CREATE RULE YesNoRule AS @value IN ('Нет','Да')
GO
/* Если пользователь не введет значение то будет использовано значение по-умолчанию */
CREATE DEFAULT DefaultNo AS 'Нет'
GO
/* Создание пользовательского типа данных */
EXEC sp_addtype YesNoType, 'char(3)', 'NOT NULL'
GO
/* Связывание пользовательского типа с правилом */
EXEC sp_bindrule 'YesNoRule','YesNoType'
GO

/* Связывание умолчания с пользовательским типом. */

EXEC sp_bindefault 'DefaultNo','YesNoType'
GO

/* Здесь начинаются запросы по созданию таблиц */
CREATE TABLE Банки
(
КодБанка INT PRIMARY KEY, /* первичный ключ */
Название VARCHAR(30),
Адресс VARCHAR(350),
РасчСчет BIGINT NOT NULL CONSTRAINT CIX_Банк_1 UNIQUE ON Secondary, /* Уникальный индекс. Т.е. р/с не может повторятся */
Телефон CHAR(15) NOT NULL
)

CREATE TABLE Контрагенты
(
КодКонтрагента INT IDENTITY(1,1) PRIMARY KEY,
/* IDENTITY – автонумерация. В скобках начальное значение и шаг */
Название VARCHAR(60),
ФормаСобств VARCHAR(10),
ФИОруководителя VARCHAR(60),
КодБанка INT NULL,
Адресс VARCHAR(50),
РасчСчет INT NOT NULL CONSTRAINT CIX_Контрагенты_1 UNIQUE ON Secondary,
Телефон CHAR(15) NOT NULL,
/* Здесь создается связь между первичным ключем родительской сущности Банки и вшешним ключем в дочерней сущности Контрагенты. Далее задается правило ссылочной целостности при удалении и обновлении */
CONSTRAINT FK_Контрагенты_Банки FOREIGN KEY (КодБанка)
REFERENCES Банки ON UPDATE CASCADE ON DELETE CASCADE
)

CREATE TABLE ВидыДоговоров
(
КодВидаДоговора INT PRIMARY KEY,
Наименование VARCHAR(30)
)

CREATE TABLE Договора
(
НомДоговора INT NOT NULL,
КодКонтрагента INT NOT NULL,
КодВидаДоговора INT NOT NULL,
/* По-умолчанию с помощью системной функции будет задаватся текущая дата */
ДатаДоговора DATETIME DEFAULT getdate() NULL,
Содеражание VARCHAR(MAX) NULL,
Подписан YESNOTYPE, /* Пользовательский тип*/

PRIMARY KEY (НомДоговора,КодКонтрагента),
CONSTRAINT FK_Договор_ВидыДоговора FOREIGN KEY (КодВидаДоговора)
REFERENCES ВидыДоговоров ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT FK_Договор_Контрагенты FOREIGN KEY (КодКонтрагента)
REFERENCES Контрагенты ON UPDATE CASCADE ON DELETE CASCADE

)

CREATE TABLE ПлатДокумент
(
КодПлатДок INT PRIMARY KEY,
НомДоговора INT NOT NULL,
КодКонтрагента INT NOT NULL,
Сумма MONEY NULL CHECK (Сумма>0),
Дата DATETIME DEFAULT getdate() NULL
CONSTRAINT FK_ПлатДокумент_Договора FOREIGN KEY (НомДоговора,КодКонтрагента)
REFERENCES Договора ON UPDATE CASCADE ON DELETE CASCADE
)

CREATE TABLE ВидыУслуг
(
КодВидаУсл INT PRIMARY KEY,
Стоимость MONEY NULL CHECK (Стоимость>0),
Наименование VARCHAR(100)
)

CREATE TABLE ВидыСтраховок
(
КодВидаСтр INT PRIMARY KEY,
Наименование VARCHAR(30),
Стоимость MONEY NULL CHECK (Стоимость>0),
Срок VARCHAR(100)
)

CREATE TABLE МатЦенности
(
КодМатценности INT PRIMARY KEY,
Наименование VARCHAR(50),
СтранаПроизводитель CHAR(30),
Стоимость MONEY NULL CHECK (Стоимость>0),
ГОСТ CHAR(30),
CONSTRAINT CIX_МатЦенности UNIQUE (Наименование,СтранаПроизводитель,Стоимость,ГОСТ)
)

CREATE TABLE ДоговораУслуг
(
НомДоговора INT NOT NULL,
КодКонтрагента INT NOT NULL,
КодВидаУсл INT NOT NULL,
СрокВыполнения DATETIME DEFAULT getdate()+21 NULL,
Сумма MONEY NULL CHECK (Сумма>0)
)

CREATE TABLE ДоговораСтрахования
(
НомДоговора INT NOT NULL,
КодКонтрагента INT NOT NULL,
КодВидаСтр INT NOT NULL,
СрокДействия DATETIME DEFAULT getdate()+365 NULL,
Сумма MONEY NULL CHECK (Сумма>0)
)

CREATE TABLE ДоговораКупПрод
(
НомДоговора INT NOT NULL,
КодКонтрагента INT NOT NULL,
КодМатценности INT NOT NULL,
Количество INT NULL,
Сумма MONEY NULL CHECK (Сумма>0)
)

/*Команда ALTER TABLE позволяет вносить дополнения в существующие таблицы*/
ALTER TABLE ДоговораКупПрод ADD CONSTRAINT FK_ДоговораКупПрод_МатЦенности FOREIGN KEY (КодМатценности)
REFERENCES МатЦенности ON UPDATE CASCADE ON DELETE CASCADE
ALTER TABLE ДоговораКупПрод ADD CONSTRAINT FK_ДоговораКупПрод_Договора FOREIGN KEY (НомДоговора,КодКонтрагента)
REFERENCES Договора ON UPDATE CASCADE ON DELETE CASCADE
GO

ALTER TABLE ДоговораУслуг ADD CONSTRAINT FK_ДоговораУслуг_ВидыУслуг FOREIGN KEY (КодВидаУсл)
REFERENCES ВидыУслуг ON UPDATE CASCADE ON DELETE CASCADE
ALTER TABLE ДоговораУслуг ADD CONSTRAINT FK_ДоговораУслуг_Договора FOREIGN KEY (НомДоговора,КодКонтрагента)
REFERENCES Договора ON UPDATE CASCADE ON DELETE CASCADE

GO

ALTER TABLE ДоговораСтрахования ADD CONSTRAINT FK_ДоговораСтрахования_ВидыСтраховок FOREIGN KEY (КодВидаСтр)
REFERENCES ВидыСтраховок ON UPDATE CASCADE ON DELETE CASCADE
ALTER TABLE ДоговораСтрахования ADD CONSTRAINT FK_ДоговораСтрахования_Договора FOREIGN KEY (НомДоговора,КодКонтрагента)
REFERENCES Договора ON UPDATE CASCADE ON DELETE CASCADE
GO
/* Создание уникальных и неуникальных индексов. Индексы упорядочивают данные и ускоряют их поиск. Также может быть обеспечена уникальности индекса. */
CREATE UNIQUE INDEX UIX_ВидСтраховки ON ВидыСтраховок (Наименование)ON Secondary
CREATE UNIQUE INDEX UIX_НазваниеОрганизации ON Контрагенты (Название)ON Secondary
CREATE UNIQUE INDEX UIX_НазваниеБанка ON Банки (Название)ON Secondary
CREATE UNIQUE INDEX UIX_ДоговорКупПрод ON ДоговораКупПрод (НомДоговора,КодКонтрагента,КодМатценности) ON Secondary
CREATE INDEX IX_Наименование_Товара ON МатЦенности (Наименование)ON Secondary
CREATE INDEX IX_СтранаПроизводитель ON МатЦенности (СтранаПроизводитель)ON Secondary
CREATE INDEX IX_ФормаСобственности ON Контрагенты (ФормаСобств)ON Secondary
CREATE INDEX IX_ВидыДоговоров ON ВидыДоговоров (Наименование)ON Secondary
GO

/* Наполнение базы */
/* БАНКИ */

INSERT INTO Банки (КодБанка,Название,Адресс,РасчСчет,Телефон)
VALUES (1,'Беларусбанк','ул. Волгограгдского 5',31243221233,'2123254')
INSERT INTO Банки (КодБанка,Название,Адресс,РасчСчет,Телефон)
VALUES (2,'Приорбанк','ул. Петровского 112',3120092332,'2450214')
GO

/* МАТ.ЦЕННОСТИ */

INSERT INTO МатЦенности
(КодМатценности,Наименование,СтранаПроизводитель,Стоимость,ГОСТ)
VALUES
(1,'Тарелка','Россия',12000,23422-76)
INSERT INTO МатЦенности
(КодМатценности,Наименование,СтранаПроизводитель,Стоимость,ГОСТ)
VALUES
(2,'Кружка','Россия',6000,23423-76)
INSERT INTO МатЦенности
VALUES
(3,'Ложка','Россия',1000,24412-76)
INSERT INTO МатЦенности
(КодМатценности,Наименование,Стоимость,ГОСТ)
VALUES
(5,'Вилка',1200,24427-76)

GO

/* ВИДЫ ДОГОВОРОВ */

INSERT INTO ВидыДоговоров
VALUES
(1,'Договор страхования')
INSERT INTO ВидыДоговоров
VALUES
(2,'Договор услуг')
INSERT INTO ВидыДоговоров
VALUES
(3,'Договор купли-продажи')

/* ВИДЫ СТРАХОВОК */

INSERT INTO ВидыСтраховок
(КодВидаСтр,Наименование,Стоимость,Срок)
VALUES
(1,'Страхование жизни',1200000,'Неопределенный')
INSERT INTO ВидыСтраховок
(КодВидаСтр,Наименование,Стоимость,Срок)
VALUES
(2,'Страхование авто',60000,'Год')
INSERT INTO ВидыСтраховок
(КодВидаСтр,Наименование,Стоимость,Срок)
VALUES
(3,'Страхование собственности',400000,'Пять лет')
INSERT INTO ВидыСтраховок
(КодВидаСтр,Наименование,Стоимость,Срок)
VALUES
(4,'Страхование здоровья',1200000,'Полтора года')

/* ВИДЫ УСЛУГ */

INSERT INTO ВидыУслуг (КодВидаУсл,Стоимость,Наименование)
VALUES
(1,30000,'Ремонт помещения')
INSERT INTO ВидыУслуг (КодВидаУсл,Стоимость,Наименование)
VALUES
(2,40000,'Грузоперевозка')
INSERT INTO ВидыУслуг (КодВидаУсл,Стоимость,Наименование)
VALUES
(3,1240000,'Капремонт здания')

/* КОНТРАГЕНТЫ */

INSERT INTO Контрагенты (Название,ФормаСобств
,ФИОруководителя,КодБанка,Адресс,РасчСчет,Телефон)
VALUES
('Элис'
,'ЧТУП'
,' Кановалов Виктор Петрович'
,1
,'г.Минск, ул. Первомайская, 31'
,231234112
,2390782)

INSERT INTO Контрагенты (Название,ФормаСобств
,ФИОруководителя,КодБанка,Адресс,РасчСчет,Телефон)
VALUES
('Владимаг'
,'ОАО'
,'Шушкевич Станислав Эдуардович'
,1
,'г.Слоним, ул. 50 лет СССР, 4'
,912312903
,37238)

INSERT INTO Контрагенты (Название,ФормаСобств
,ФИОруководителя,КодБанка,Адресс,РасчСчет,Телефон)
VALUES
('Ресторан "Акапулько"'
,'РУП'
,'Масляков Игорь Русланович'
,2
,'г.Борисов, ул. Академика Королева, 1'
,912831238
,23211)
INSERT INTO Контрагенты (Название,ФормаСобств
,ФИОруководителя,КодБанка,Адресс,РасчСчет,Телефон)
VALUES
('Столовая "Заводская"'
,'ЧТУП'
,'Ефремов'
,2
,'г.Новогрудок, ул. Козлова, 16'
,023948234
,55602)

/* ДОГОВОРА */
INSERT INTO Договора (НомДоговора,КодВидаДоговора,КодКонтрагента,ДатаДоговора,Содеражание)
VALUES
(1,3,3,'01.08.2010','Договор купли-продажи на стандартных условиях')
INSERT INTO Договора (НомДоговора,КодВидаДоговора,КодКонтрагента,ДатаДоговора,Содеражание,Подписан)
VALUES
(2,2,1,'02.12.2010','Договор услуг на стандартных условиях','Да')
INSERT INTO Договора (НомДоговора,КодВидаДоговора,КодКонтрагента,ДатаДоговора,Содеражание)
VALUES
(3,3,4,'02.13.2010','Договор страхования физического лица')
INSERT INTO Договора (НомДоговора,КодВидаДоговора,КодКонтрагента,ДатаДоговора,Содеражание,Подписан)
VALUES
(4,2,2,'04.01.2010','Услуги по ремонту','Да')
INSERT INTO Договора (НомДоговора,КодВидаДоговора,КодКонтрагента,Содеражание)
VALUES
(5,1,4,'Договор страхования на стандартных условиях')
INSERT INTO Договора (НомДоговора,КодВидаДоговора,КодКонтрагента,Содеражание)
VALUES
(6,3,4,'Договор страхования срочный')
GO

/* ДОГОВОРА СТРАХОВАНИЯ */

INSERT INTO ДоговораСтрахования (НомДоговора,КодКонтрагента,КодВидаСтр,СрокДействия,Сумма)
VALUES
(3
,4
,2
,'02.13.2011'
,60000)
INSERT INTO ДоговораСтрахования (НомДоговора,КодКонтрагента,КодВидаСтр,СрокДействия,Сумма)
VALUES
(5
,4
,3
,getdate()+1825
,400000)
INSERT INTO ДоговораСтрахования (НомДоговора,КодКонтрагента,КодВидаСтр,СрокДействия,Сумма)
VALUES
(6
,4
,4
,getdate()+547.5
,1200000)

/* ДОГОВОРА КУПЛИ-ПРОДАЖИ */

INSERT INTO ДоговораКупПрод (НомДоговора,КодКонтрагента,КодМатценности,Количество,Сумма)
VALUES
(1,3,3,10,10000)
INSERT INTO ДоговораКупПрод (НомДоговора,КодКонтрагента,КодМатценности,Количество,Сумма)
VALUES
(1,3,2,3,18000)
INSERT INTO ДоговораКупПрод (НомДоговора,КодКонтрагента,КодМатценности,Количество,Сумма)
VALUES
(1,3,1,10,120000)
/* ДОГОВОРА УСЛУГ */
INSERT INTO ДоговораУслуг (НомДоговора,КодКонтрагента,КодВидаУсл,СрокВыполнения,Сумма)
VALUES
(2,1,2,'05.12.2010',40000)
INSERT INTO ДоговораУслуг (НомДоговора,КодКонтрагента,КодВидаУсл,СрокВыполнения,Сумма)
VALUES
(4,2,1,'07.01.2010',30000)
GO

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

• Подсчет количества строк в таблице.
USE Dogovora_802301_01
Go

CREATE PROC pr_КолСтр /* Задаем имя процедуры */
@ИмяТаблицы VARCHAR(20), /* Входной параметр – имя таблицы */
@КолСтрок INT OUTPUT /* Выходной – количество строк */
AS
DECLARE @SQL varchar(80) /* Строка динамического запроса */
CREATE TABLE #Temp /* Временная таблица для получения значения */
( ЧислоСтрок INT) /* из динамического запроса. */
SET @SQL = 'INSERT INTO #Temp SELECT COUNT(*) FROM '+ @ИмяТаблицы
/* Здесь функция COUNT(*) возвратит число строк */
exec(@SQL)
SELECT @КолСтрок = ЧислоСтрок FROM #Temp
GO
• Изменение даты, добавлением или прибавлением некоторого числа денй.

CREATE PROC pr_ИзменДату
@КолДней INT, /*Некоторое число дней*/
@Прибавить char(1) = '+' /*Параметр который будет указывать прибавлять или вычитать дни*/
AS
/* Условие проверяющее правильность параметра уменьшения/прибавления */
IF (@Прибавить!='+') AND (@Прибавить!='-') SELECT 'Введите -\+ (уменьшить,прибавить)'
ELSE
BEGIN
IF (@Прибавить!='+') SET @КолДней = - @КолДней
UPDATE Договора
SET ДатаДоговора = ДатаДоговора + @КолДней

UPDATE ДоговораСтрахования
SET СрокДействия = СрокДействия + @КолДней

UPDATE ДоговораУслуг
SET СрокВыполнения = СрокВыполнения + @КолДней

UPDATE ПлатДокумент
SET Дата = Дата + @КолДней
END
GO

• Нахождение минимального, максимального, среднего, суммарного значения для заданного столбца таблицы.

CREATE PROC pr_ММСС
@Столбец CHAR(15), /*Задаётся номер или название столбца.*/
@max INT OUTPUT, @min INT OUTPUT, @avg INT OUTPUT, @sum INT OUTPUT
AS
IF (@Столбец = 'Сумма') OR (@Столбец = '4') SELECT @max = MAX(Сумма), @min = MIN(Сумма), @avg = AVG(Сумма), @sum = SUM(Сумма)
FROM ДоговораКупПрод ELSE

IF (@Столбец='Количество') OR (@Столбец='5') SELECT @max = MAX(Количество), @min = MIN(Количество), @avg = AVG(Количество), @sum = SUM(Количество)
FROM ДоговораКупПрод ELSE
SELECT 'Ошибка. Повторите выбор'
GO

• Отбор строк по 2-ум параметрам.

CREATE PROC pr_Выборка
@Страна VARCHAR(20) = NULL, /*Значения для отбора.*/
@Наименование VARCHAR(20) = NULL
AS
SET @Страна=ISNULL(@Страна,'') /*Если переменная пуста – присвоить пустую строку.*/
SET @Наименование=ISNULL(@Наименование,'')
/*Выберем все значения ГДЕ СтранаПроизводитель и Наименование равны значениям отбора*/
SELECT * FROM МатЦенности WHERE (СтранаПроизводитель=@Страна OR @Страна='') AND (Наименование=@Наименование OR @Наименование='')
GO

• Преобразование фамилии, имени, отчества в фамилию с инициалами.

CREATE PROC pr_ФИО
@str CHAR(50) = 'Иванов Иван Иванович', /* Исходная строка */
@out VARCHAR(40) OUTPUT /* Выходная строка */
AS
DECLARE @a INT, @b INT, @ch CHAR(1), @ins INT
/* @b – это длинная исходной строки. @a– счетчик выходной строки (курсор)
@ch- это одиночный символ (строка под курсором), @ins – вспомогательная переменная */
SET @str = LTRIM(@str)
SET @b=LEN(@str)
SET @a=1 /* устанавливаем курсор в начало строки */
SET @ch = SUBSTRING(@str,1,1) /* первый символ входной строки */
SET @out=''
WHILE @ch!=' ' /* пока не дойдем до конца фамилии (до пробела) переносим все в выходную строку */
BEGIN
SET @out=@out+@ch
SET @a=@a+1
SET @ch = SUBSTRING(@str,@a,1)
END
SET @out=@out+' ' /* добавляем пробел после фамилии */
WHILE @a!=@b+1
BEGIN

SET @ch = SUBSTRING(@str,@a,1)
SET @a=@a+1
IF @ch=' '
BEGIN
SET @ins=1
END
ELSE IF @ins=1
BEGIN
SET @ins=0
SET @out=@out+@ch+'.'
END
END
SET @out=UPPER(@out) /* Переводим строку в верхний регистр. */
GO

5. Таблица протокол

CREATE TABLE Протокол
( Номер INT IDENTITY(1,1) PRIMARY KEY,
ДатаВремя DATETIME DEFAULT getdate(),
Пользователь varchar(32),
Действие varchar(32),
ЧислоСтрок INT )
GO

6. Триггер фиксации действий пользователя.

CREATE TRIGGER tr_DEL /* При удалении записи в таблице матценности. */
ON МатЦенности
FOR DELETE AS
BEGIN
DECLARE @uns INT
SELECT @uns = КодМатценности FROM deleted /* Считываем из системной таблице информацию об удаленной строке. */

INSERT INTO Протокол (ДатаВремя,ЧислоСтрок,Пользователь,Действие)
VALUES (getdate(),@@ROWCOUNT,CURRENT_USER,'Удаление')
/* Заносим данные в протокол. */
END
GO

CREATE TRIGGER tr_INS /* При вставке. */
ON МатЦенности
FOR INSERT AS
BEGIN
DECLARE @uns INT
SELECT @uns = КодМатценности FROM inserted
INSERT INTO Протокол (ДатаВремя,ЧислоСтрок,Пользователь,Действие)
VALUES (getdate(),@@ROWCOUNT,CURRENT_USER,'Вставка')
END
Go

CREATE TRIGGER tr_UPD /* При изменении. */
ON МатЦенности
FOR UPDATE AS
BEGIN
DECLARE @uns INT
SELECT @uns = КодМатценности FROM inserted
INSERT INTO Протокол (ДатаВремя,ЧислоСтрок,Пользователь,Действие)
VALUES (getdate(),@@ROWCOUNT,CURRENT_USER,'Обновление')
END

7. Скрипт проверки работы процедур и триггера.

USE Dogovora_802301_01
GO

/* Проверка процедуры определ. кол. строк в таблице*/
/* ==============ХП1=================*/
DECLARE @n INT
EXEC pr_КолСтр 'Контрагенты',@n OUTPUT
PRINT 'Количество строк в таблице "Контрагенты" - '+CONVERT(CHAR(5),@n)

EXEC pr_КолСтр 'Договора',@n OUTPUT
PRINT 'Количество строк в таблице "Договора" - '+CONVERT(CHAR(5),@n)

Результат:

/* Изменим все даты на указанное число дней*/
/* ==============ХП2=================*/
SELECT * FROM ДоговораСтрахования
EXEC pr_ИзменДату 3,'-'
SELECT * FROM ДоговораСтрахования
EXEC pr_ИзменДату 3,'+'
SELECT * FROM ДоговораСтрахования

Результат:


/* Найдем Минимальное, Максимальное, Среднее и Сумму в таблице договора купли-продажи*/
/* ==============ХП3=================*/
DECLARE @Макс INT, @Мин INT, @Сред INT, @Сумм INT
EXEC pr_ММСС '5',@Макс OUTPUT,@Мин OUTPUT,@Сред OUTPUT,@Сумм OUTPUT
SELECT @Макс Максимальное,@Мин Минимальное,@Сред Среднее,@Сумм Сумма

EXEC pr_ММСС '4',@Макс OUTPUT,@Мин OUTPUT,@Сред OUTPUT,@Сумм OUTPUT
SELECT @Макс Максимальное,@Мин Минимальное,@Сред Среднее,@Сумм Сумма

Результат:


/* Выборка из таблицы мат.ценности по 2ум параметрам*/
/* ==============ХП4=================*/
EXEC pr_Выборка '',''
EXEC pr_Выборка 'Россия','Ложка'
EXEC pr_Выборка 'Россия',''

Результат:


/* ==============ХП5=================*/
DECLARE @f2 VARCHAR(30)
EXEC pr_ФИО 'Хуархэ Владистат Уералович ибн Абдуй Малухай ',@f2 OUTPUT
SELECT @f2



/*=====ТРИГГЕРЫ========*/
/* Удаление Мат.Ценностией. Занесение в протокол */
DELETE FROM МатЦенности WHERE 1=1
GO
/*Добавление в Мат.Ценности. Занесение в протокол */
BEGIN TRAN
CREATE TABLE #Temp
(
КодМатценности INT PRIMARY KEY,
Наименование VARCHAR(50),
СтранаПроизводитель CHAR(30),
Стоимость MONEY NULL CHECK (Стоимость>0),
ГОСТ CHAR(30),
)
INSERT INTO #Temp
(КодМатценности,Наименование,СтранаПроизводитель,Стоимость,ГОСТ)
VALUES
(1,'Тарелка','Россия',12000,23422-76)
INSERT INTO #Temp
(КодМатценности,Наименование,СтранаПроизводитель,Стоимость,ГОСТ)
VALUES
(2,'Кружка','Россия',6000,23423-76)
INSERT INTO #Temp
VALUES
(3,'Ложка','Россия',1000,24412-76)
INSERT INTO #Temp
(КодМатценности,Наименование,Стоимость,ГОСТ)
VALUES
(5,'Вилка',1200,24427-76)

INSERT МатЦенности SELECT КодМатценности,Наименование,СтранаПроизводитель,Стоимость,ГОСТ FROM #Temp
DROP TABLE #Temp
COMMIT TRAN
GO

/*Изменение данных в таблице*/
BEGIN TRAN
UPDATE МатЦенности
SET СтранаПроизводитель = 'Беларусь'
WHERE КодМатценности > 2
COMMIT TRAN
GO
SELECT * FROM Протокол
Категория: ОЛОБД | Добавил: basiliy
Просмотров: 1702 | Загрузок: 104
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]