Программирование на SQL | Задание 2. Создать таблицу описания скважин

В этом разделе сайта попытаемся разобраться с программированием баз данных. Язык называется SQL. В этом языке нет или почти нет классов, переменных, массивов и циклов. Сравнивать его с языками высокого уровня не имеет смысла. Но без него Вы не сможете написать интерфейс для настольных приложений Windows или интернет сайтов. Для Разработчика надо обязательно надо знать SQL, библиотеки обработки данных на C#, Microsoft Visual Studio, Microsoft SQL Server Management Studio или dbForge Studio for SQL Server

Задание 2. Создать таблицу описания скважин

Если Вы разобрались с 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 

 

Добавить комментарий

Loading