Атрибуты проектов SQL Server и объектов баз данных

Обновлен: Июль 2008

К каждому проекту Microsoft SQL Server и ко всем файлам объектов базы данных, которые есть в проекте, должен быть применен атрибут.

Проект / Файл

Атрибут, который должен быть применен

Project.

SqlAssemblyAttribute

Статистическая функция.

SqlUserDefinedAggregateAttribute

Сохраненная процедура.

SqlProcedureAttribute

Триггер.

SqlTriggerAttribute

Пользовательская функция.

SqlFunctionAttribute

Пользовательский тип данных.

SqlUserDefinedTypeAttribute

Атрибут SqlAssembly.

Этот атрибут должен применяться ко всем сборкам, которые будут развернуты в базе данных Microsoft SQL Server 2005. Этот атрибут не имеет параметров. Он добавляется в файл AssemblyInfo при создании проекта SQL Server.

SqlUserDefinedAggregate Attribute

Этот атрибут должен быть применен к статистическим файлам. Этот атрибут имеет два свойства: Format и MaxByteSize.

  • Format
    Обязательный параметр. Формат хранения статистической функции. Поддерживаемые форматы:

    Native — указывает, что SQL Server использует эффективное представление в машинном коде на диске. Этот формат является наиболее компактным и обеспечивает максимальную производительность. Требования для этого формата:

    • Атрибут StructLayout.LayoutKindSequential должен быть применен к статистической функции.

    • Все поля статистической функции должны быть непреобразуемыми, т. е. они должны иметь общее представление в управляемой и в неуправляемой памяти и не требовать специальной обработки маршаллером взаимодействия.

    • Статистическая функция не должна определять значение для MaxByteSize.

    • Статистическая функция не должна иметь полей [NonSerialized].

    • Поля не должны быть помечены как явный макет.

    UserDefined — указывает, что пользователь имеет полный контроль над двоичным форматом. Требования для этого формата:

    • Статистическая функция должна реализовывать IBinarySerialize.

    • Статистическая функция должна определять значение для MaxByteSize.

  • MaxByteSize
    Максимальный размер экземпляра этой статистической функции в байтах. Требуется, только если для свойства UserDefined задано значение Format. Не требуется указывать, если для свойства Native задано значение Format.

Этот пример указывает, что для свойства Native значением является Format агрегата.

<SqlUserDefinedAggregate(Format.Native)> _
Public Class SampleAggregate
    '...
End Class
[SqlUserDefinedAggregate(Format.Native)]
public class SampleAggregate
{
   //...
}

Атрибут SqlProcedure

Этот атрибут должен быть применен к файлам сохраненных процедур. Этот атрибут имеет следующие параметры:

  • Name — необязательный. Задает имя, которое используется на сервере SQL Server для обращения к сохраненной процедуре.

Этот пример устанавливает, что к сохраненной процедуре обращаются по имени sp_sqlName.

Partial Public Class StoredProcedures

    <SqlProcedure(Name:="sp_sqlName")> _
    Public Shared Sub SampleProcedure(ByVal s As SqlString)
        '...
    End Sub
End Class
public partial class StoredProcedures
{
    [SqlProcedure(Name="sp_sqlName")]
    public static void SampleProcedure(SqlString s)
    {
        //...
    }
}

Атрибут SqlTrigger

Этот атрибут должен быть применен к файлам триггеров. Этот атрибут имеет следующие параметры:

  • Name — необязательный. Определяет имя, которое используется на сервере SQL Server для ссылок на триггер.

  • Target — обязательный. Указывает таблицу, к которой применяется этот триггер.

  • Event — обязательный. Указывает действие, которое активирует триггер.

В этом примере триггер активируется путем обновления существующих данных (UPDATE) в таблице authors.

Partial Public Class Triggers

    <SqlTrigger(Target:="authors", Event:="FOR UPDATE")> _
    Public Shared Sub AuthorsUpdateTrigger()

        '...
    End Sub
End Class
public partial class Triggers
{
    [SqlTrigger(Target="authors", Event="FOR UPDATE")]
    public static void AuthorsUpdateTrigger()
    {
        //...
    }
}

В этом примере к триггеру обращаются по имени trig_onpubinsert. Триггер активизирован путем добавления новых данных (INSERT) в таблицу publishers.

Partial Public Class Triggers

    <SqlTrigger(Name:="trig_onpubinsert", Target:="publishers", Event:="FOR INSERT")> _
    Public Shared Sub PublishersInsertTrigger()

        '...
    End Sub
End Class
public partial class Triggers
{
    [SqlTrigger(Name="trig_onpubinsert", Target="publishers", Event="FOR INSERT")]
    public static void PublishersInsertTrigger()
    {
        //...
    }
}

Атрибут SqlFunction

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

  • Name — необязательный. Указывает имя, используемое на сервере SQL Server для обращения к пользовательской функции.

    z28bh0b5.alert_note(ru-ru,VS.90).gifПримечание.

    Для функций, возвращающих табличное значение, необходимо указать значение для свойства TableDefinition, которое содержит SQL-представление определения возвращаемой таблицы.

В этом примере к пользовательской функции обращаются по имени sp_scalarFunc.

Partial Public Class UserDefinedFunctions

    <SqlFunction(Name:="sp_scalarFunc")> _
    Public Shared Function SampleScalarFunction(ByVal s As SqlString) As SqlString

        '...
        Return ""
    End Function
End Class
public partial class UserDefinedFunctions
{
    [SqlFunction(Name="sp_scalarFunc")]
    public static SqlString SampleScalarFunction(SqlString s)
    {
        //...
        return "";
    }
}

В этом примере к пользовательской функции обращаются по имени sp_tableFunc. Свойство TableDefinition имеет значение letter nchar(1).

Partial Public Class UserDefinedFunctions

    <SqlFunction(Name:="sp_tableFunc", TableDefinition:="letter nchar(1)")> _
    Public Shared Function SampleTableFunction(ByVal s As SqlString) As IEnumerable

        '...
        Return New Char(2) {"a"c, "b"c, "c"c}
    End Function
End Class
public partial class UserDefinedFunctions
{
    [SqlFunction(Name="sp_tableFunc", TableDefinition="letter nchar(1)")]
    public static IEnumerable SampleTableFunction(SqlString s)
    {
        //...
        return new ArrayList(new char[3] {'a', 'b', 'c'});
    }
}

Атрибут SqlUserDefinedType

Этот атрибут должен применяться к файлам пользовательских типов. Этот атрибут имеет четыре свойства: Format, MaxByteSize, IsFixedLength и IsByteOrdered.

  • Format
    Обязательный. Формат хранения пользовательского типа. Поддерживаемые форматы:

    Native — указывает, что SQL Server использует эффективное представление в машинном коде на диске. Это параметр наибольшей компактности, обычно обладающий максимальной производительностью. Требования для этого формата:

    • Атрибут StructLayout.LayoutKindSequential должен применяться к типу.

    • Все поля пользовательского типа должны быть непреобразуемыми, т. е. они должны иметь общее представление в управляемой/неуправляемой памяти и не требовать специальной обработки маршаллером взаимодействия.

    • Тип не должен определять значение для MaxByteSize.

    • Тип не должен иметь полей [NonSerialized].

    • Поля не должны быть помечены как явный макет.

    UserDefined — указывает, что пользователь имеет полный контроль над двоичным форматом. Требования для этого формата:

    • Тип должен реализовывать IBinarySerialize.

    • Тип должен определять значение для MaxByteSize.

  • MaxByteSize
    Обязательный. Максимальный размер экземпляра этого типа в байтах.

  • IsFixedLength
    Необязательно. Указывает, имеют ли все экземпляры типа одинаковую длину. Значение по умолчанию — false.

  • IsByteOrdered
    Необязательный. Указывает, упорядочено ли двоичное представление этого типа, то есть может ли оно использоваться для сравнения экземпляров данного типа. Значение по умолчанию — false.

Этот пример устанавливает, что Format пользовательского типа является SerializedDataWithMetadata и MaxByteSize равен 8000 байт.

<SqlUserDefinedType(Format.Native, MaxByteSize:=8000)> _
Public Class SampleType

   '...
End Class
[SqlUserDefinedType(Format.Native, MaxByteSize=8000)]
public class SampleType
{
   //...
}

См. также

Задачи

Практическое руководство. Создание проекта SQL Server

Практическое руководство. Создание и запуск хранимой процедуры SQL Server в среде CLR

Практическое руководство. Создание и запуск триггера CLR SQL Server

Практическое руководство. Создание и выполнение статистических функций SQL Server в среде CLR

Практическое руководство. Создание и запуск пользовательской функции SQL Server в среде CLR

Практическое руководство. Создание и запуск пользовательского типа SQL Server в среде CLR

Пошаговое руководство. Создание хранимой процедуры в управляемом коде

Практическое руководство. Отладка хранимой процедуры SQL CLR

Основные понятия

Введение в интеграцию SQL Server со средой CLR (ADO.NET)

Преимущества использования управляемого кода для создания объектов баз данных

Шаблоны элементов для проектов SQL Server

Ссылки

Атрибуты проектов SQL Server и объектов баз данных

Другие ресурсы

Отладка баз данных SQL в среде CLR

Журнал изменений

Дата

Журнал

Причина

Июль 2008

Обновлены сведения относительно атрибута MaxByteSize для атрибута SQLUserDefinedAggregate.

Исправление ошибки содержимого.