Вход/Регистрация
Обработка баз данных на Visual Basic®.NET
вернуться

Прайс Кевин Т.

Шрифт:

1. В окне Query программы SQL Query Analyzer введите следующую команду:

sp_helptext Employee_view

2. Выполните введенную команду, нажав клавишу <F5> или щелкнув на кнопке Execute Query панели инструментов программы SQL Query Analyzer. В результате выполнения этой команды SQL Server вернет текст хранимой процедуры во вкладке Grids (рис. 3.20).

РИС. 3.20. Отображение текста представления с помощью хранимой процедуры sp_helptext

Создание триггеров

Триггер (trigger) — это особый тип хранимой процедуры, который выполняется при доступе к данным в таблице. Понятие триггера в SQL Server аналогично понятию процедуры события в Visual Basic: триггер выполняется при обновлении, удалении или вставке данных в таблицу.

Триггер обычно используется при сложном доступе к данным, например: сохранение в файле журнала информации об обновлениях базы данных или же создание в новой записи сложного значения поля (по умолчанию) на основе запроса к одной или нескольким таблицам.

Не нужно использовать триггеры для поддержки ссылочной целостности; для этого лучше обратиться к встроенным средствам SQL Server. Старайтесь при работе с базами данных использовать средства, предоставляемые SQL Server.

Например, можно использовать триггеры, чтобы обеспечить уникальное значение в столбце для сохранения первичного ключа. Этот способ характерен для программы Microsoft Access Upsizing Tools; в ней генерируется случайное значение первичного ключа каждой записи с помощью триггера. (Для этого можно использовать уникальное поле, как уже упоминалось ранее в главе.) Пример такого кода генерации первичного ключа приведен ниже.

CREATE TRIGGER tblCustomer_ITrig ON dbo.tblCustomer

FOR INSERT

AS

DECLARE @randc int, @newc int

SELECT @randc = (SELECT convert(int, rand * power(2, 30)))

SELECT @newc = (SELECT ID FROM inserted)

UPDATE tblCustomer SET ID = @randc WHERE ID = @newc

НА ЗАМЕТКУ

Для корректной работы каждого из этих триггеров и обновления идентификационного поля нужно переустановить значения этого поля таким образом, чтобы оно не считалось идентификационным. Для этого перейдите в диалоговое окно Design Table и задайте для свойства Identity(Идентификационное поле) значение No.

Создание первичного ключа записи на основе случайного значения – самый простой способ уникальной идентификации записи. Однако такой способ имеет два недостатка.

Во-первых, первичный ключ генерируется в произвольном порядке. В некоторых случаях это не очень существенная проблема, однако если использовать первичный ключ для нумерации выписываемых счетов, то может случиться так, что счет с номером 20010 будет выписан раньше, чем счет с номером 20009.

Во-вторых, существует потенциальная проблема, состоящая в том, что сгенерированный уникальный ключ на самом деле не будет уникальным, т.е. при создании ключа не выполняется проверка существования записи с таким же значением первичного ключа. Конечно, вероятность того, что будет сгенерировано два одинаковых значения, очень мала, но она все же существует (тип данных integer в SQL Server имеет длину 4 бита, т.е. диапазон возможных значений: -2,1×109…2,1×109).

Бизнес-ситуация 3.1: создание триггера для поиска созвучных слов

Брэд Джонс, президент компании Jones Novelties Incorporated, одобрил предварительную работу своего разработчика базы данных. Теперь он готов приступить к следующей проблеме, связанной с базой данных, и создать запросы для извлечения информации о клиентах по введенному созвучному имени (например, имена произносятся одинаково, но пишутся по-разному) с учетом случайных опечаток в нем. Как организовать поиск клиента, если вы не помните точное написание его имени, а только его произношение: Smith или Smyth, McManus или MacManus? Каждому человеку с необычной фамилией наверняка приходилось сталкиваться с ее неверной записью на слух.

Разработчик базы данных для решения этой проблемы решил воспользоваться функцией soundex, специально предусмотренной для этого в SQL Server. Она преобразует слово в алфавитно-цифровое значение, которое представляет базовые звуки слова. Если такое значение создается в момент ввода имени, то поиск имени можно вести по его алфавитно-цифровому значению. Конечно, такой запрос вернет гораздо больше записей, чем нужно, но все они будут отвечать одному произношению.

Для реализации этого компонента в базе данных Jones Novelties нужно выполнить следующие действия:

• изменить таблицу tblCustomer для вставки нового поля LastNameSoundex;

• запустить запрос обновления данных для создания алфавитно-цифровых значений звучания для имен клиентов в таблице tblCustomer;

• создать триггер, который сгенерирует в поле LastNameSoundex алфавитно-цифровое значение звучания для введенного или измененного имени;

• создать хранимую процедуру, которая возвращает всех клиентов с одинаково звучащими именами.

Разработчик базы данных начинает с создания нового поля LastNameSoundex в таблице tblCustomer для хранения в нем алфавитно-цифровых значений звучания имен всех клиентов. Это можно сделать с помощью следующей команды:

  • Читать дальше
  • 1
  • ...
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: