Если Вы разобрались с 1 заданием, то в этом задании тоже будет создавать таблица, но с некоторыми другим параметрами. В решение пропущено часть кода и доработать код вы должные его сами. Это сделано для того, чтобы вы научились программировать, а не просто читать sql код
Создаем таблицу Описания скважин. Список полей для данной таблицы
- Код скважины (уникальное текстовое, до 20 символов)
- Код месторождения (связать со справочником месторождений)
- Дата начала бурения скважины ( не ранее 1950 и не позднее текущего года, по умолчанию: текущая дата)
- Дата окончания бурения скважины ( не ранее 1950 и не позднее текущего года)
- Глубина скважины фактическая (положительное число до двух знаков после запятой, не более 2000 метров)
Примечание. Формат поля Кода скважины: ББ-0000бббб (необязательные: 2 заглавных русских буквы и тире, обязательные: 4 цифры, далее любые строчные буквы и цифры). Например: ОМ-0023бис, 0023, 0023бис, М-0023клин1
Алгоритм проверки кода реализовать в отдельной функции. В триггере при вводе и редактировании проверять формат скважины, если не подходит, то по возможности корректировать. Например: 8 -> 0008, 80бис -> 0080бис, с-80->С-0080,СС80->СС-0080, С80->С-0080.
В остальных случаях – сообщение об ошибке, операцию отменять (предоставить скрипт создания таблицы, триггера) Заполнить таблицу произвольными данными (предоставить скрипт с командами ввода данных)
На первом этапе выполнения задачи можно создать функцию, которая будет проверять код скважины. Она не связана с таблицами, поэтому должна отработать без ошибок. Код ее приводится ниже. Маленький нюанс. Вам надо написать код SQL (не более 1 строки), там где указано "..." И задача будет решена так, как указано в техзадании.
CREATE FUNCTION [dbo].[SetCode]
(
@Value as nvarchar(20)
)
RETURNS nvarchar(20)
AS
BEGIN
DECLARE @S as nvarchar(1), @I as int, @CODE as nvarchar(4), @P as int, @CODEFULL as nvarchar(20), @STOP int
SET @I = 1
SET @CODE = ''
SET @STOP = 0
while @I <= LEN(@Value)
BEGIN
SET @S = SUBSTRING(@Value,@I,1)
IF @S IN ('0','1','2','3','4','5','6','7','8','9')
BEGIN
IF @STOP = 0 SET @CODE = @CODE + @S
END
ELSE
BEGIN
IF @CODE <> '' SET @STOP = 1
END
SET @I = @I + 1
END
IF @CODE <> ''
ELSE
RETURN (@Value)
IF (@Value = @CODE)
SET @Value = replace(@Value, @Code, @CODEFULL)
ELSE
SET @Value = replace(@Value ,@Code,'-' + @CODEFULL)
RETURN (Replace(@Value,'--','-'))
END
GO
Примеры для проверки кода выглядят так
/*
select dbo.[SetCode]('8') as code
select dbo.[SetCode]('80бис') as code
select dbo.[SetCode]('с-80') as code
select dbo.[SetCode]('СС80') as code
select dbo.[SetCode]('С80') as code
select dbo.[SetCode]('TestTest') as code
select dbo.[SetCode]('С80test123456') as code
select dbo.[SetCode]('ОМ-0023бис') as code
select dbo.[SetCode]('0023') as code
select dbo.[SetCode]('0023бис') as code
select dbo.[SetCode]('М-0023клин1') as code
*/
На следующем этапе создадим таблицу Описания скважин. Создаете ее в конструкторе, а далее выбираете пункт меню "Создать скрипт для таблицы". Вызывается правой кнопкой.
GO
-- Создаем таблицу
CREATE TABLE [dbo].[ОписанияСкважин](
[Код скважины] [nvarchar](20) NOT NULL,
[Код месторождения] [int] NULL,
[Дата начала бурения скважины] [datetime] NULL,
[Дата окончания бурения скважины] [datetime] NULL,
[Глубина скважины фактическая] [decimal](7, 2) NULL,
CONSTRAINT [PK_ОписанияСкважин] PRIMARY KEY CLUSTERED
(
[Код скважины] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[ОписанияСкважин] ADD CONSTRAINT [DF_Описа��ияСкважин_Дата начала бурения скважины] DEFAULT (getdate()) FOR [Дата начала бурения скважины]
GO
Следующий, заключительный этап задания создание триггера для таблицы. Вместо "..." подставьте свой код
GO
CREATE TRIGGER [dbo].[ОписанияСкважин_UPD_INS]
ON [dbo].[ОписанияСкважин]
FOR UPDATE, INSERT
AS
UPDATE [dbo].[ОписанияСкважин]
SET
[Код скважины] = ISNULL((Select dbo.SetCode(s.[Код скважины])),'-'),
[Дата начала бурения скважины] = '20210101',
[Дата окончания бурения скважины]= '20220101',
[Глубина скважины фактическая] = 1000,
[Код месторождения] = 1
FROM [ОписанияСкважин] s
INNER JOIN Inserted i
ON s.[Код скважины] = i.[Код скважины]
GO
Вот и все. Чтобы все это заработало правильно в Microsoft SQL Server Management Studio нужно добавить "последний штрих", т.е. чуть-чуть доработать программу. Это лучше сделать вам самостоятельно, если Вы, конечно, заинтересованы стать специалистом баз данных.
Полное решение дано по этой ссылке Набор квалификационных решений SQL Server