Atributos para proyectos de base de datos CLR de SQL Server y objetos de base de datos
Se debe aplicar un atributo a cada proyecto de SQL Server y a todos los objetos de base de datos que contiene un proyecto. Puede utilizar la integración de Common Language Runtime de SQL Server (CLR de SQL) para crear los siguientes tipos de objetos:
Proyecto o archivo |
Atributo que se debe aplicar |
---|---|
Project |
SqlAssemblyAttribute |
Aggregate |
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 SQL Server. No tiene parámetros Se agrega al archivo AssemblyInfo cuando se crea un proyecto de SQL Server.
SqlUserDefinedAggregate (Atributo)
Este atributo se debe aplicar a objetos de agregado definidos por el usuario. Este atributo tiene dos propiedades: Format yMaxByteSize.
Format
Obligatorio. Corresponde al formato de almacenamiento del agregado. Los formatos compatibles son los siguientes: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 los siguientes:
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 los siguientes:
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 objetos de procedimiento almacenado. Tiene el parámetro siguiente:
- Name - Opcional. Especifica el nombre que se utiliza en 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 objetos. Tiene los parámetros siguientes:
Name - Opcional. Especifica el nombre que se utiliza en SQL Server para hacer referencia al desencadenador.
Target - Obligatorio. Especifica el destino al que se aplica el desencadenador. El tipo de destino depende tipo de destino que cree. Puede crear desencadenadores DDL, DML o LOGON. El tipo más común de desencadenador se aplica a las tablas.
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 objetos 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 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 Transact-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 objetos de tipo definidos por el usuario. Este atributo tiene cuatro propiedades: Format, MaxByteSize, IsFixedLength y IsByteOrdered.
Format
Obligatorio. Corresponde al formato de almacenamiento del tipo definido por el usuario. Los formatos compatibles son los siguientes: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 los siguientes:
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 los siguientes:
El tipo debe implementar IBinarySerialize.
El tipo debe especificar un valor para MaxByteSize.
MaxByteSize
Obligatorio. 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 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 y ejecutar un agregado de SQL Server mediante la integración de Common Language Runtime
Tutorial: Crear un procedimiento almacenado en código administrado
Cómo: Depurar un procedimiento almacenado de SQL CLR
Conceptos
Introducción a la integración de CLR y SQL Server (ADO.NET)
Ventajas de utilizar código administrado para crear objetos de base de datos