Atributos para proyectos de servidor SQL Server y objetos de base de datos

Actualización: Julio de 2008

Se debe aplicar un atributo a cada proyecto de Microsoft SQL Server y a todos los archivos de objetos de base de datos que contiene un proyecto:

Proyecto o archivo

Atributo que se debe aplicar

Proyecto

SqlAssemblyAttribute

Agregado

SqlUserDefinedAggregateAttribute

Procedimiento almacenado

SqlProcedureAttribute

Desencadenador

SqlTriggerAttribute

Función definida por el usuario

SqlFunctionAttribute

Tipo definido por el usuario

SqlUserDefinedTypeAttribute

SqlAssembly (Atributo)

Este atributo se debe aplicar a todos los ensamblados implementados en una base de datos de Microsoft SQL Server 2005. No tiene parámetros Se agrega al archivo AssemblyInfo cuando se crea un proyecto de servidor SQL Server.

SqlUserDefinedAggregate (Atributo)

Este atributo se debe aplicar para agregar archivos. Este atributo tiene dos propiedades: Format y MaxByteSize.

  • Format
    Necesaria. Corresponde al formato de almacenamiento del agregado. Los formatos compatibles son:

    Native – Especifica que SQL Server utiliza una representación nativa eficiente en el disco. Esta opción de formato es la más compacta y proporciona el máximo rendimiento. Los requisitos para este formato son:

    • El atributo StructLayout.LayoutKindSequential se debe aplicar al agregado.

    • Todos los campos del agregado deben ser representables como bits o bytes, es decir, deben tener una representación común tanto en la memoria administrada como en la no administrada y no requerir ningún control especial del calculador de referencias de interoperabilidad.

    • El agregado no debe especificar un valor para MaxByteSize.

    • El agregado no debe tener ningún campo [NonSerialized].

    • Los campos no se deben marcar como un diseño explícito.

    UserDefined - Especifica que el usuario tiene control total sobre el formato binario. Los requisitos para este formato son:

    • El agregado debe implementar IBinarySerialize.

    • El agregado debe especificar un valor para MaxByteSize.

  • MaxByteSize
    Corresponde al tamaño máximo de una instancia de este agregado, en bytes. Solo es necesario si Format se establece en UserDefined. No se debe especificar cuando Format se establece en Native.

En este ejemplo se especifica que la propiedad Format del agregado es Native.

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

SqlProcedure (Atributo)

Este atributo se debe aplicar a los archivos de procedimiento almacenado. Tiene el parámetro siguiente:

  • Name - Opcional. Especifica el nombre que se utiliza en el servidor SQL Server para hacer referencia al procedimiento almacenado.

Este ejemplo especifica que se hace referencia al procedimiento almacenado utilizando el nombre 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 (Atributo)

Este atributo se debe aplicar para desencadenar archivos. Tiene los parámetros siguientes:

  • Name - Opcional. Especifica el nombre que se utiliza en el servidor SQL Server para hacer referencia al desencadenador.

  • Target - Obligatorio. Especifica la tabla a la que se aplica el desencadenador.

  • Event - Obligatorio. Especifica la acción que activa el desencadenador.

Este ejemplo especifica que el desencadenador se activa al actualizar los datos existentes (UPDATE) en la tabla 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()
    {
        //...
    }
}

Este ejemplo especifica que se hace referencia al desencadenador utilizando el nombre trig_onpubinsert. El desencadenador se activa al agregar nuevos datos (INSERT) a la tabla 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 se debe aplicar a archivos de función definidos por el usuario que devuelven un valor escalar o una tabla. Tiene los parámetros siguientes:

  • Name - Opcional. Especifica el nombre que se utiliza en el servidor SQL Server para hacer referencia a la función definida por el usuario.

    Nota:

    Para las funciones que devuelven un valor de tabla, se debe especificar un valor para la propiedad TableDefinition, que contiene la representación SQL de la definición de la tabla devuelta.

Este ejemplo especifica que se hace referencia a la función definida por el usuario utilizando el nombre 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 "";
    }
}

Este ejemplo especifica que se hace referencia a la función definida por el usuario utilizando el nombre sp_tableFunc. La propiedad TableDefinition tiene el valor 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 (Atributo)

Este atributo se debe aplicar a archivos de tipo definidos por el usuario. Este atributo tiene cuatro propiedades: Format, MaxByteSize, IsFixedLength e IsByteOrdered.

  • Format
    Necesaria. Corresponde al formato de almacenamiento del tipo definido por el usuario. Los formatos compatibles son:

    Native – Especifica que SQL Server utiliza una representación nativa eficiente en el disco. Ésta es la opción más compacta que normalmente produce el máximo rendimiento. Los requisitos para este formato son:

    • Se debe aplicar al tipo el atributo StructLayout.LayoutKindSequential.

    • Todos los campos del tipo definido por el usuario deben ser representables como bits o bytes, es decir, deben tener una representación común tanto en la memoria administrada como en la no administrada y no requerir un control especial del contador de referencias de interoperabilidad.

    • El tipo no debe especificar un valor para MaxByteSize.

    • El tipo no debe tener ningún campo [NonSerialized].

    • Los campos no se deben marcar como un diseño explícito.

    UserDefined - Especifica que el usuario tiene control total sobre el formato binario. Los requisitos para este formato son:

    • El tipo debe implementar IBinarySerialize.

    • El tipo debe especificar un valor para MaxByteSize.

  • MaxByteSize
    Necesaria. Corresponde al tamaño máximo de una instancia de este tipo, en bytes.

  • IsFixedLength
    Opcional. Especifica si todas las instancias del tipo tienen la misma longitud. El valor predeterminado es false.

  • IsByteOrdered
    Opcional. Especifica si se ordena la representación binaria de este tipo, es decir, si se puede utilizar para comparar instancias de este tipo. El valor predeterminado es false.

Este ejemplo especifica que el valor de Format del tipo definido por el usuario es SerializedDataWithMetadata y que el de MaxByteSize es 8000 bytes.

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

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

Vea también

Tareas

Cómo: Crear un proyecto de SQL Server

Cómo: Crear y ejecutar un procedimiento CLR almacenado de SQL Server

Cómo: Crear y ejecutar un desencadenador CLR de SQL Server

Cómo: Crear y ejecutar un agregado CLR de SQL Server

Cómo: Crear y ejecutar una función CLR de servidor SQL Server definido por el usuario

Cómo: Crear y ejecutar un tipo CLR de servidor SQL Server definido por el usuario

Tutorial: Crear un procedimiento almacenado en código administrado

Cómo: Depurar un procedimiento almacenado de SQL CLR

Conceptos

Introduction to SQL Server CLR Integration (ADO.NET)

Ventajas de utilizar código administrado para crear objetos de base de datos

Plantillas de elementos para proyectos de SQL Server

Referencia

Atributos para proyectos de servidor SQL Server y objetos de base de datos

Otros recursos

Depuración de bases de datos de SQL CLR

Historial de cambios

Fecha

Historial

Motivo

Julio de 2008

Se ha actualizado la información relacionada con el atributo MaxByteSize para el atributo SQLUserDefinedAggregate.

Corrección de errores de contenido.