
- •Русский университет инноваций кировский филиал кафедра «информационные системы в экономике»
- •Постановка задачи
- •Подготовка сервера к импорту базы данных
- •2.1. Обследование сервера с использованием хранимых процедур
- •3. Импорт данных
- •. Фиксация результатов импорта
- •Далее указывается драйвер системного источника данных
- •3.2. Обследование вновь импортированной базы данных
- •3.3. Дополнение базы данных необходимыми хранимыми процедурами и триггерами
- •Создание клиентского приложения (Delphi)
3.3. Дополнение базы данных необходимыми хранимыми процедурами и триггерами
Для того, чтобы проверить какие таблицы имеются в базе данных нужно выполнить хранимую процедуру sp_tables:
Table_Qualifier |
Table_Owner |
Table_Name |
Table_Type |
Remarks |
biblioteka |
dbo |
sysallocations |
SYSTEM TABLE |
NULL |
biblioteka |
dbo |
sysfiles1 |
SYSTEM TABLE |
NULL |
biblioteka |
dbo |
sysforeignkeys |
SYSTEM TABLE |
NULL |
biblioteka |
dbo |
sysfulltextcatalogs |
SYSTEM TABLE |
NULL |
biblioteka |
dbo |
sysindexes |
SYSTEM TABLE |
NULL |
biblioteka |
dbo |
sysmembers |
SYSTEM TABLE |
NULL |
biblioteka |
dbo |
sysobjects |
SYSTEM TABLE |
NULL |
biblioteka |
dbo |
syspermissions |
SYSTEM TABLE |
NULL |
biblioteka |
dbo |
sysreferences |
SYSTEM TABLE |
NULL |
biblioteka |
dbo |
systypes |
SYSTEM TABLE |
NULL |
biblioteka |
dbo |
sysusers |
SYSTEM TABLE |
NULL |
biblioteka |
dbo |
dtproperties |
TABLE |
NULL |
Table_Qualifier |
Table_Owner |
Table_Name |
Table_Type |
Remarks |
biblioteka |
dbo |
table1 |
TABLE |
NULL |
biblioteka |
dbo |
table2 |
TABLE |
NULL |
biblioteka |
dbo |
table3 |
TABLE |
NULL |
biblioteka |
dbo |
table4 |
TABLE |
NULL |
biblioteka |
dbo |
table5 |
TABLE |
NULL |
biblioteka |
dbo |
sysalternates |
VIEW |
NULL |
biblioteka |
dbo |
sysconstraints |
VIEW |
NULL |
biblioteka |
dbo |
syssegments |
VIEW |
NULL |
biblioteka |
INFORMATION_SCHEMA |
CHECK_CONSTRAINTS |
VIEW |
NULL |
biblioteka |
dbo |
sysallocations |
SYSTEM TABLE |
NULL |
Структуру таблиц в SQL Server см. Приложение А.
Для просмотра колонок таблицы и их значений применяем процедуру sp_columns table1:
TableQualifier |
TableOwner |
TableName |
Column_name |
Data_type |
Type_name |
precision |
length |
biblioteka |
dbo |
table1 |
literatura |
1 |
char |
40 |
40 |
biblioteka |
dbo |
table1 |
god_isd |
1 |
char |
5 |
5 |
biblioteka |
dbo |
table1 |
isdatel |
1 |
char |
25 |
25 |
biblioteka |
dbo |
table1 |
n_toma |
3 |
decimal |
8 |
10 |
biblioteka |
dbo |
table1 |
vid_isd |
1 |
char |
8 |
8 |
biblioteka |
dbo |
table1 |
cod_avtora |
4 |
int |
10 |
4 |
biblioteka |
dbo |
table1 |
nalich |
-7 |
bit |
1 |
1 |
Подробную информацию о таблицах базы данных (тип, владелец, когда создана таблица) можно просмотреть с помощью процедуры sp_help table1:
NAME |
OWNER |
TYPE |
CREATEDDATATIME |
table1 |
dbo |
user table |
2004-04-29 10:46:25.520 |
Выполним недокументированную процедуру фирмы Microsoft для таблицы table1:
sp_mshelpcolumns 'table1'
Col_name |
Col_id |
Col_tyupename |
Col_len |
Col_prec |
Col_scale |
Col_basetypename |
Col_defname |
literatura |
1 |
char |
40 |
NULL |
NULL |
char |
NULL |
god_isd |
2 |
char |
5 |
NULL |
NULL |
char |
NULL |
isdatel |
3 |
char |
25 |
NULL |
NULL |
char |
NULL |
n_toma |
4 |
decimal |
5 |
8 |
0 |
decimal |
NULL |
vid_isd |
5 |
char |
8 |
NULL |
NULL |
char |
NULL |
cod_avtora |
6 |
int |
4 |
NULL |
NULL |
int |
NULL |
nalich |
7 |
bit |
1 |
NULL |
NULL |
bit |
NULL |
Просмотреть кто работает на сервере можно с помощью процедуры sp_who:
spid |
ststus |
loginame |
hostname |
blk |
dbname |
cmd |
1 |
sleeping |
sa |
|
0 |
master |
SIGNAL HANDLER |
2 |
background |
sa |
|
0 |
biblioteka |
LOCK MONITOR |
3 |
background |
sa |
|
0 |
biblioteka |
LAZY WRITER |
4 |
sleeping |
sa |
|
0 |
biblioteka |
LOG WRITER |
5 |
sleeping |
sa |
|
0 |
biblioteka |
CHECKPOINT SLEEP |
6 |
background |
sa |
|
0 |
biblioteka |
AWAITING COMMAND |
8 |
sleeping |
sa |
KLASS_1_13 |
0 |
biblioteka |
AWAITING COMMAND |
10 |
runnable |
sa |
KLASS_1_13 |
0 |
biblioteka |
SELECT |
Часто разработчикам приходится реализовывать сложные алгоритмы поддержания целостности данных. Имеется много средств, предоставляющих разработчикам достаточно эффективные механизмы обеспечения целостности данных. Но этих средств часто бывает недостаточно. Например, с помощью таких механизмов как PRIMARY KEY, FOREIGN KEY, UNIQUE, нельзя разрешить изменение данных только в том случае, если в одном из столбов находится определённое значение.
Описанная ситуация является простейшим примером проверок, которые часто приходится выполнять перед изменением, удалением или вставкой данных в таблицу. В реальной ситуации используются гораздо более сложные алгоритмы предварительной проверки данных. Помимо выполнения простых проверок, или модификации данных одной таблицы иногда бывает необходимо соответствующим образом модифицировать одной или более других таблиц. Решением описанной задачи является применение триггеров.
Триггер - это аналог хранимой процедуры, которая выполняется автоматически при условиях изменения данных.
Создадим для таблицы table1 триггер tab_trigger1, который будет запрещать вставку новых строк в таблицу, выдавая при этом сообщение 'Вставка строк запрещена':
CREATE TRIGGER tab_trigger1
ON table1
FOR INSERT
AS
PRINT 'Вставка строк запрещена'
ROLLBACK TRAN
Теперь попытаемся вставить новую строку в таблицу table1. Но прежде чем сделать это, посмотрим сколько строк имеется в этой таблице. Для этого выполним следующую команду:
SELECT COUNT(*) FROM table1
В ответ будет выдано следующее:
-----------
19
(1 row(s) affected)
Теперь же попробуем вставить новую строку (с помощью команды INSERT) и снова посмотрим, сколько же строк имеется в таблице:
INSERT INTO table1 VALUES
('Пушкин', '1999', 'Дрофа', '1', 'Книга', '1', '0')
GO
SELECT COUNT(*) FROM table1
Полученный результат:
Вставка строк запрещена
-----------
19
(1 row(s) affected)