Partilhar via


Atributos para objetos de banco de dados e de projetos de banco de dados do CLR de SQL

Um atributo deve ser aplicado a cada SQL Server projeto e a todos os objetos de banco de dados que contém de um projeto. Você pode usar a integração de SQL Server Common Language Runtime (CLR SQL) para criar os seguintes tipos de objetos:

Projeto / arquivo

Atributo que deve ser aplicado

Project

SqlAssemblyAttribute

Agregado

SqlUserDefinedAggregateAttribute

Procedimento armazenado

SqlProcedureAttribute

Disparador

SqlTriggerAttribute

User-defined Function

SqlFunctionAttribute

User-defined Type

SqlUserDefinedTypeAttribute

SqlAssembly Attribute

Este atributo deve ser aplicado a todos os assemblies que são implantados em um SQL Server banco de dados. Este atributo não tem parâmetros. Ele é adicionado ao arquivo AssemblyInfo quando você cria um SQL Server project.

Atributo SqlUserDefinedAggregate

Este atributo deve ser aplicado a objetos de agregados definidos pelo usuário. Este atributo tem duas propriedades: FormatandMaxByteSize.

  • Format
    Obrigatório. O formato de armazenamento do agregado. Os formatos aceitos são como segue:

    Native– Especifica que SQL Server usa uma eficiente representação nativa no disco. Esta opção de formato é o mais compacta e fornece o melhor desempenho. Os requisitos para esse formato são:

    • The StructLayout.LayoutKindSequential attribute must be applied to the aggregate.

    • Todos os campos do agregado precisam permitir transferências de bits, ou seja, eles devem ter uma representação comum tanto na memória gerenciada e não gerenciada e não exigem tratamento especial pelo interop marshaler.

    • The aggregate must not specify a value for MaxByteSize.

    • A agregação não deve ter quaisquer campos [NonSerialized].

    • Campos não devem ser marcados como um layout explícito.

    UserDefined - Specifies that the user has full control over the binary format. Os requisitos para esse formato são:

    • The aggregate must implement IBinarySerialize.

    • The aggregate must specify a value for MaxByteSize.

  • MaxByteSize
    O tamanho máximo de uma instância desta agregação, em bytes. Necessário somente se o Format é definida como UserDefined. Não deve ser especificado quando o Format é definida como Native.

Este exemplo especifica que o Format do agregado é Native.

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

Atributo SqlProcedure

Este atributo deve ser aplicado a objetos de procedimento armazenado. Este atributo tem o parâmetro a seguir:

  • Name - Optional. Especifica o nome que é usado na SQL Server para fazer referência o procedimento armazenado.

This example specifies that the stored procedure is referenced using the name 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)
    {
        //...
    }
}

Atributo SqlTrigger

Este atributo deve ser aplicado para acionar a objetos. Este atributo tem os seguintes parâmetros:

  • Name - Optional. Especifica o nome que é usado na SQL Server para fazer referência o disparador.

  • Target - Required. Especifica o destino ao qual o disparador é aplicado. O tipo de destino depende do tipo de destino que você criar. Você pode criar disparadores LOGON, DML ou DDL. O tipo mais comum de disparador é aplicado às tabelas.

  • Event - Required. Especifica a ação que ativa o disparador.

This example specifies that the trigger is activated by updating existing data (UPDATE) in the table 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()
    {
        //...
    }
}

This example specifies that the trigger is referenced using the name trig_onpubinsert. The trigger is activated by adding new data (INSERT) to the table 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()
    {
        //...
    }
}

Atributo SqlFunction

Este atributo deve ser aplicado a objetos de função definida pelo usuário, que retornam um valor escalar ou uma tabela. Este atributo tem os seguintes parâmetros:

  • Name - Optional. Especifica o nome que é usado na SQL Server para fazer referência a função definida pelo usuário.

    ObservaçãoObservação

    Para funções que retornam um valor de tabela, você deve especificar um valor para o TableDefinition propriedade, que contém a representação do Transact-SQL da definição da tabela retornada.

This example specifies that the user-defined function is referenced using the name 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 "";
    }
}

This example specifies that the user-defined function is referenced using the name sp_tableFunc. The TableDefinition property has the value 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'});
    }
}

Atributo SqlUserDefinedType

Este atributo deve ser aplicado a objetos do tipo definido pelo usuário. Este atributo tem quatro propriedades: Format, MaxByteSize, IsFixedLength, and IsByteOrdered.

  • Format
    Obrigatório. O formato de armazenamento do tipo definido pelo usuário. Os formatos aceitos são como segue:

    Native– Especifica que SQL Server usa uma eficiente representação nativa no disco. Esta é a opção mais compacta que normalmente resulta no melhor desempenho. Os requisitos para esse formato são:

    • The StructLayout.LayoutKindSequential attribute must be applied to the type.

    • Todos os campos do tipo definido pelo usuário precisam permitir transferências de bits, ou seja, eles devem ter uma representação comum tanto na memória gerenciada como na não gerenciada, e não exigem tratamento especial pelo interop marshaler.

    • The type must not specify a value for MaxByteSize.

    • O tipo não deve ter quaisquer campos [NonSerialized].

    • Campos não devem ser marcados como um layout explícito.

    UserDefined - Specifies that the user has full control over the binary format. Os requisitos para esse formato são:

    • The type must implement IBinarySerialize.

    • The type must specify a value for MaxByteSize.

  • MaxByteSize
    Obrigatório. O tamanho máximo de uma instância desse tipo, em bytes.

  • IsFixedLength
    Opcional. Especifica se todas as instâncias do tipo são do mesmo tamanho. O padrão é false.

  • IsByteOrdered
    Opcional. Especifica se a representação binário desse tipo são ordenados, ou seja, se ele pode ser usado para comparar instâncias desse tipo. O padrão é false.

Este exemplo especifica que o Format do tipo definido pelo usuário é SerializedDataWithMetadata e o MaxByteSize é de 8000 bytes.

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

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

Consulte também

Tarefas

Como: Criar um projeto para os objetos de banco de dados que usam a integração de tempo de execução de linguagem comum SQL Server

Como: Criar e executar um procedimento armazenado do SQL Server usando a integração do Common Language Runtime

Como: Criar e executar um disparador de SQL Server usando a integração do Common Language Runtime

Como: Criar e executar um agregado de SQL Server usando a integração do Common Language Runtime

Como: Criar e executar uma função de SQL Server User-Defined usando a integração do Common Language Runtime

Como: Criar e executar um tipo de SQL Server User-Defined usando a integração do Common Language Runtime

Demonstra Passo a passo: Criar um procedimento armazenado no código gerenciado

Como: Depurar um CLR SQL procedimento armazenado

Conceitos

Introduction to SQL Server CLR Integration (ADO.NET)

Vantagens de usar código gerenciado para criar objetos de bancos de dados