Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Записка1.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
6.1 Mб
Скачать

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)