-- Проверка существования и удаление базы данных New_EmployeeDB, если она существует
IF DB_ID('New_EmployeeDB') IS NOT NULL
BEGIN
DROP DATABASE New_EmployeeDB;
END
GO
-- Создание базы данных
CREATE DATABASE New_EmployeeDB;
GO
-- Переключение на созданную базу данных
USE New_EmployeeDB;
GO
-- Проверка существования и удаление таблицы New_StaffTable, если она существует
IF OBJECT_ID('dbo.New_StaffTable', 'U') IS NOT NULL
BEGIN
DROP TABLE dbo.New_StaffTable;
END
GO
-- Создание таблицы New_StaffTable с полями New_StaffID, New_Name и New_Salary
CREATE TABLE New_StaffTable (
New_StaffID int PRIMARY KEY,
New_Name varchar(50),
New_Salary decimal(10,2)
);
GO
-- Вставка тестовых данных в таблицу New_StaffTable
INSERT INTO New_StaffTable VALUES (1, 'Alice', 5000.00);
INSERT INTO New_StaffTable VALUES (2, 'Bob', 6000.00);
INSERT INTO New_StaffTable VALUES (3, 'Charlie', 7000.00);
INSERT INTO New_StaffTable VALUES (4, 'David', 8000.00);
INSERT INTO New_StaffTable VALUES (5, 'Eve', 9000.00);
GO
-- Проверка существования и удаление таблицы New_ResultTable, если она существует
IF OBJECT_ID('dbo.New_ResultTable', 'U') IS NOT NULL
BEGIN
DROP TABLE dbo.New_ResultTable;
END
GO
-- Создание итоговой таблицы New_ResultTable
CREATE TABLE New_ResultTable (
New_StaffID int,
New_Name varchar(50),
New_Salary decimal(10,2)
);
GO
-- Проверка существования и удаление процедуры New_GetTopStaff, если она существует
IF OBJECT_ID('dbo.New_GetTopStaff', 'P') IS NOT NULL
BEGIN
DROP PROCEDURE dbo.New_GetTopStaff;
END
GO
-- Создание процедуры для выбора трех сотрудников с максимальной зарплатой
CREATE PROCEDURE New_GetTopStaff
AS
BEGIN
-- Очистка итоговой таблицы перед вставкой новых данных
DELETE FROM New_ResultTable;
-- Вставка трех сотрудников с наивысшей зарплатой
INSERT INTO New_ResultTable (New_StaffID, New_Name, New_Salary)
SELECT TOP 3 New_StaffID, New_Name, New_Salary
FROM New_StaffTable
ORDER BY New_Salary DESC;
END;
GO
-- Выполнение процедуры для заполнения итоговой таблицы
EXEC New_GetTopStaff;
GO
-- Генерация XML-документа из итоговой таблицы
DECLARE @New_XML xml;
SET @New_XML = (SELECT * FROM New_ResultTable FOR XML PATH('Employee'), ROOT('Employees'));
GO
-- Проверка, является ли первый сотрудник "Ильей" с помощью метода exist
IF (SELECT @New_XML.exist('/Employees/Employee[1][New_Name="Ilya"]')) = 1
BEGIN
PRINT 'Первый сотрудник - Илья';
END
ELSE
BEGIN
PRINT 'Первый сотрудник - не Илья';
END;
GO
-- Добавление четвертого сотрудника в итоговую таблицу
INSERT INTO New_ResultTable (New_StaffID, New_Name, New_Salary)
VALUES (999, 'Ilya', 1000.00);
GO
-- Проверка существования и удаление триггера New_AvgSalaryTrigger, если он существует
IF OBJECT_ID('dbo.New_AvgSalaryTrigger', 'TR') IS NOT NULL
BEGIN
DROP TRIGGER dbo.New_AvgSalaryTrigger;
END
GO
-- Создание триггера для вычисления средней зарплаты после вставки или обновления
CREATE TRIGGER New_AvgSalaryTrigger
ON New_ResultTable
AFTER INSERT, UPDATE
AS
BEGIN
DECLARE @New_AvgSalary decimal(10,2);
SELECT @New_AvgSalary = AVG(New_Salary) FROM New_ResultTable;
PRINT 'Средняя зарплата составляет ' + CAST(@New_AvgSalary AS varchar(20));
END;
GO