Attributi per oggetti di database e progetti di database CLR SQL
È necessario applicare un attributo a ogni progetto SQL Server e tutti gli oggetti di database in esso contenuti. È possibile utilizzare l'integrazione Common Language Runtime di SQL Server (SQL CLR) per creare i seguenti tipi di oggetti:
Progetto / File |
Attributo da applicare |
---|---|
Project |
SqlAssemblyAttribute |
Aggregate |
SqlUserDefinedAggregateAttribute |
Stored procedure |
SqlProcedureAttribute |
Trigger |
SqlTriggerAttribute |
Funzione definita dall'utente |
SqlFunctionAttribute |
Tipo definito dall'utente |
SqlUserDefinedTypeAttribute |
Attributo SqlAssembly
Questo attributo deve essere applicato a tutti gli assembly distribuiti in un database SQL Server. e non presenta parametri. Viene aggiunto al file AssemblyInfo quando si crea un progetto SQL Server.
Attributo SqlUserDefinedAggregate
Questo attributo deve essere applicato agli oggetti aggregati definiti dall'utente. Questo attributo dispone di due proprietà: Format eMaxByteSize.
Format
Obbligatoria. Formato di archiviazione dell'aggregato. Di seguito sono riportati i formati supportati:Native: indica che in SQL Server viene utilizzata una rappresentazione nativa efficiente su disco. Questa opzione di formato è la più compressa e offre le prestazioni migliori. I requisiti per questo formato sono i seguenti:
L'attributo StructLayout.LayoutKindSequential deve essere applicato ai file di aggregati.
Tutti i campi dell'aggregato devono essere copiabili, ovvero devono avere una rappresentazione comune nella memoria gestita e non gestita e non richiedono una gestione speciale al gestore di marshalling di interoperabilità.
L'aggregato non deve specificare un valore per la proprietà MaxByteSize.
L'aggregato non deve presentare campi [NonSerialized].
I campi non devono essere contrassegnati con un layout esplicito.
UserDefined: indica che l'utente esercita un controllo completo sul formato binario. I requisiti per questo formato sono i seguenti:
L'aggregato deve implementare l'interfaccia IBinarySerialize.
L'aggregato deve specificare un valore per la proprietà MaxByteSize.
MaxByteSize
Dimensioni massime di un'istanza dell'aggregato espresse in byte. Obbligatorio solo se l'oggetto Format è impostato su UserDefined. Non deve essere specificato se l'oggetto Format è impostato su Native.
In questo esempio viene specificato che l'oggetto Format dell'aggregato è Native.
<SqlUserDefinedAggregate(Format.Native)>
Public Class SampleAggregate
'...
End Class
[SqlUserDefinedAggregate(Format.Native)]
public class SampleAggregate
{
//...
}
Attributo SqlProcedure
Questo attributo deve essere applicato agli oggetti di stored procedure. e presenta il seguente parametro:
- Name - Facoltativo. Specifica il nome utilizzato su SQL Server per fare riferimento alla stored procedure.
Nell'esempio che segue viene specificato che alla stored procedure viene fatto riferimento con il nome 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)
{
//...
}
}
Attributo SqlTrigger
Questo attributo deve essere applicato agli oggetti trigger. e presenta i seguenti parametri:
Name - Facoltativo. Specifica il nome utilizzato su SQL Server per fare riferimento al trigger.
Target - Obbligatorio. Specifica la destinazione a cui si applica il trigger. Il tipo di destinazione dipende dal tipo di destinazione creata. È possibile creare DDL, DML o trigger LOGON. Alle tabelle viene applicato il tipo più comune di trigger.
Event - Obbligatorio. Specifica l'azione che attiva il trigger.
Nell'esempio che segue viene specificato che il trigger viene attivato mediante l'aggiornamento di dati esistenti (UPDATE) nella tabella 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()
{
//...
}
}
Nell'esempio riportato di seguito viene specificato che al trigger viene fatto riferimento con il nome trig_onpubinsert. Il trigger viene attivato mediante l'aggiunta di nuovi dati (INSERT) alla tabella 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()
{
//...
}
}
Attributo SqlFunction
Questo attributo deve essere applicato agli oggetti delle funzioni definite dall'utente che restituiscono valori scalari o tabelle. e presenta i seguenti parametri:
Name - Facoltativo. Specifica il nome utilizzato su SQL Server per fare riferimento alla funzione definita dall'utente.
Nota
Nel caso delle funzioni che restituiscono un valore di tabella, è necessario specificare un valore per la proprietà TableDefinition che contenga la rappresentazione Transact-SQL della definizione della tabella restituita.
Nell'esempio che segue viene specificato che alla funzione definita dall'utente viene fatto riferimento con il nome 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 "";
}
}
Nell'esempio che segue viene specificato che alla funzione definita dall'utente viene fatto riferimento con il nome sp_tableFunc. La proprietà TableDefinition ha il valore 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'});
}
}
Attributo SqlUserDefinedType
Questo attributo deve essere applicato agli oggetti dei tipi definiti dall'utente. Questo attributo dispone di quattro proprietà: Format, MaxByteSize, IsFixedLength e IsByteOrdered.
Format
Obbligatoria. Formato di archiviazione del tipo definito dall'utente. Di seguito sono riportati i formati supportati:Native: indica che in SQL Server viene utilizzata una rappresentazione nativa efficiente su disco. Questa è l'opzione di formato più compressa e di norma offre le prestazioni migliori. I requisiti per questo formato sono i seguenti:
L'attributo StructLayout.LayoutKindSequential deve essere applicato al tipo.
Tutti i campi del tipo definito dall'utente devono essere copiabili ovvero devono avere una rappresentazione comune nella memoria gestita e non gestita e non richiedono una gestione speciale al gestore di marshalling di interoperabilità.
Il tipo non deve specificare un valore per la proprietà MaxByteSize.
Il tipo non deve presentare campi [NonSerialized].
I campi non devono essere contrassegnati con un layout esplicito.
UserDefined: indica che l'utente esercita un controllo completo sul formato binario. I requisiti per questo formato sono i seguenti:
Il tipo deve implementare l'interfaccia IBinarySerialize.
Il tipo deve specificare un valore per la proprietà MaxByteSize.
MaxByteSize
Obbligatoria. Dimensioni massime di un'istanza del tipo espresse in byte.IsFixedLength
Facoltativo. Specifica se tutte le istanze del tipo sono della stessa lunghezza. Il valore predefinito è false.IsByteOrdered
Facoltativo. Specifica se la rappresentazione binaria del tipo è ordinata, ovvero se può essere utilizzata per il confronto delle istanze del tipo. Il valore predefinito è false.
In questo esempio viene specificato che la proprietà Format del tipo definito dall'utente è SerializedDataWithMetadata e che MaxByteSize è pari a 8000 byte.
<SqlUserDefinedType(Format.Native, MaxByteSize:=8000)>
Public Class SampleType
'...
End Class
[SqlUserDefinedType(Format.Native, MaxByteSize=8000)]
public class SampleType
{
//...
}
Vedere anche
Attività
Procedura dettagliata: creazione di una stored procedure nel codice gestito
Procedura: eseguire il debug di una stored procedure CLR SQL
Concetti
Introduzione all'integrazione con CLR di SQL Server (ADO.NET)
Vantaggi dell'utilizzo di codice gestito per creare oggetti di database