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çã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 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
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