В начало
База данных АТС
Постановка
задачи: необходимо в СУБД «MS SQL Server
2005» создать базу данных «АТС».
Запускаем «MS SQL Server 2005 MSE», соединяемся с сервером, переходим в инспектор объектов и создаем
новую базу, даем ей имя «АТС».
Далее идем на ветку «Базы данных –
АТС – Таблицы» и создаем таблицу «Города».
Имя столбца
|
Тип данных
|
Код города
|
BigInt,
первичный ключ, счетчик
|
Город
|
nVarChar(20)
|
Заполним таблицу «Города».
Рис.
1. Заполненная таблица «Города»
Также создадим таблицу «Улицы».
Имя столбца
|
Тип данных
|
Код улицы
|
BigInt,
первичный ключ, счетчик
|
Улица
|
nVarChar(20)
|
Заполним ее.
Рис.
2. Заполненная таблица «Улицы»
Потом немного поизгаляемся и
создадим таблицу «Префиксы номеров».
Имя столбца
|
Тип данных
|
Код префикса
|
BigInt, первичный ключ, счетчик
|
Префикс
|
SmallInt
|
Код города
|
BigInt,
внешний ключ
|
Далее заполним таблицу «Префиксы
номеров» некоторыми достоверными сведениями.
Рис.
3. Заполненная таблица «Префиксы номеров»
Потом создадим таблицу с фамилиями
«ФИО».
Рис.
4. Заполненная таблица «ФИО»
А теперь создадим таблицу
«Абоненты». При этом поля «Телефон» и «Адрес» будем заполнять псевдо-случайными значениями на основании других таблиц.
Имя столбца
|
Тип данных
|
Код абонента
|
BigInt, первичный ключ, счетчик
|
ФИО
|
nVarChar(20)
|
Телефон
|
nVarChar(12)
|
Адрес
|
nVarChar(50)
|
Пишем код на создание процедуры «Sluchaynie_Ludi».
USE АТС;
GO
CREATE PROCEDURE Sluchaynie_Ludi
@MaxZapisey BigInt
AS
DECLARE @FIO
nVarChar(20),
@Prefiks SmallInt,
@Telefon nVarChar(12),
@Gorod nVarChar(20),
@Ulica nVarChar(20),
@Adres nVarChar(50),
@Counter BigInt;/* Счетчик для цикла*/
SET
@Counter=1
WHILE
@Counter <= @MaxZapisey
BEGIN
-- Случайное ФИО
SET @FIO = (SELECT TOP 1 [ФИО] FROM
[ФИО] ORDER BY
NEWID());
-- Случайный ПРЕФИКС
SET @Prefiks = (SELECT TOP 1 [Префикс] FROM [Префиксы номеров] ORDER BY
NEWID());
-- Случайный
ТЕЛЕФОН
SET @Telefon
= '('+ LTRIM(STR(@Prefiks)) +')' + LTRIM(STR(RAND()*1e7));
-- Случайный
ГОРОД
SET @Gorod = (SELECT TOP 1 [Город] FROM [Города] ORDER BY NEWID());
-- Случайная УЛИЦА
SET @Ulica = (SELECT TOP 1 [Улица] FROM [Улицы] ORDER BY NEWID());
-- Случайный АДРЕС
SET @Adres = 'г.'+
@Gorod +', ' + @Ulica +
', д.' + LTRIM(STR(RAND()*1e2)) + ', кв.' + LTRIM(STR(RAND()*1e2));
-- Вывод
результата в окно сообщений
PRINT @FIO
+ ' '+@Telefon + ' ' + @Adres;
-- Добавление
записи в таблицу АБОНЕНТЫ
INSERT INTO Абоненты
(ФИО,Телефон, Адрес)
VALUES (@FIO, @Telefon, @Adres)
SET @Counter = @Counter + 1
END
|
Далее, для ее выполнения пишем другой
код.
EXECUTE Sluchaynie_Ludi 5;
|
Результат выполнения процедуры «Sluchaynie_Ludi»
показан чуть ниже.
Рис.
5. Автозаполнение таблицы «Абоненты»
Фамилий ввел всего пять, поэтому
среди абонентов появилось два однофамильца, проживающих в разных местах.