Рефераты | Рефераты по информатике, программированию | MS SQL Server 9 “Yukon”. Интеграция с .NET | страница реферата 24 | Большая Энциклопедия Рефератов от А до Я
Большая Энциклопедия Рефератов от А до Я
  • Рефераты, курсовые, шпаргалки, сочинения, изложения
  • Дипломы, диссертации, решебники, рассказы, тезисы
  • Конспекты, отчеты, доклады, контрольные работы

  • Этот несложный DDL-триггер с каждой создаваемой в текущей базе таблицей связывает DML триггер на вставку. Имя таблицы, на которой произошло срабатывание, извлекается из свойства SqlChars SqlTriggerContext.EventData. Это пока недокументированное (к сожалению) свойство предоставляет исчерпывающую информацию о событии, вызвавшем срабатывание триггера, в формате XML. Вот так выглядит типичное значение, попадающее в наш триггер:

    <EVENT_INSTANCE>

      <PostTime>2004-01-15T04:13:59.600</PostTime>

      <SPID>56</SPID>

      <EventType>CREATE_TABLE</EventType>

      <Database>Northwind</Database>

      <Schema>dbo</Schema>

      <Object>testtrigger</Object>

      <ObjectType>TABLE</ObjectType>

      <TSQLCommand>

        <SetOptions ANSI_NULLS="ON" ANSI_NULL_DEFAULT="ON" ANSI_PADDING="ON"

           QUOTED_IDENTIFIER="ON" ENCRYPTED="FALSE" />

      <CommandText>create table testtrigger(id int identity) </CommandText>

      </TSQLCommand>

    </EVENT_INSTANCE>

    Из всех этих подробностей нас пока интересует только содержимое элемента <object>, которое вытаскивается банальным регулярным выражением (не сомневаюсь, что более искушенные разработчики не упустят случая применить XPath и XSLT). В этом примере выполнялся следующий T-SQL-скрипт:

    create table testtrigger(id int identity)

    insert into testtrigger default values

    drop table testtrigger

    --drop trigger AttachAnotherTrigger on database

    ПРЕДУПРЕЖДЕНИЕ

    Текущая версия MS Visual Studio Whidbey некорректно обрабатывает удаление DML – триггеров при автоматическом развертывании. В отличие от обычных триггеров при их удалении нужно указывать не только имя, но также и контекст (сервер или база данных) с которым связан триггер. Именно с этим связано наличие закомментированной строки в конце скрипта.

    Помимо свойства EventData, у класса SqlTriggerContext есть еще два свойства.

    Свойство TriggerAction (одноименного типа) предоставляет более удобный доступ к типу действия, вызвавшего срабатывание триггера, чем элемент <EventType>, содержащийся в EventData.

    Для DML-триггеров доступно также свойство bool[] ColumnsUpdated – массив флагов, определяющих, какие из колонок подверглись изменению. Аналогичная функциональность в триггерах T-SQL достигается при помощи функции UPDATE().

    Прямого доступа к псевдотаблицам inserted и deleted нет; но их можно прочитать используя SqlCommand, полученную уже знакомым нам методом GetCommand() класса SqlContext.

    Вот полный текст класса, в котором объявлены оба триггера:

    using System;

    using System.Data;

    using System.Data.Sql;

    using System.Data.SqlServer;

    using System.Data.SqlTypes;

    using System.Text.RegularExpressions;

    public class CTriggerTest

    {

      [SqlTrigger ("DATABASE", "AFTER CREATE_TABLE")]

      public static void AttachAnotherTrigger()

      {


    Рекомендуем скачать другие рефераты по теме: диплом государственного образца, реферат по экологии.



    Предыдущая страница реферата | 16  17  18  19  20  21  22  23  24  25  26 |




    Поделитесь этой записью или добавьте в закладки

       




    Категории:



    Разделы сайта




    •