Задание 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)
/* Изменим все даты на указанное число дней*/ /* ==============ХП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 @Макс Максимальное,@Мин Минимальное,@Сред Среднее,@Сумм Сумма
/*=====ТРИГГЕРЫ========*/ /* Удаление Мат.Ценностией. Занесение в протокол */ 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 Протокол