Condividi tramite


Attributi per oggetti di database e progetti SQL Server

Aggiornamento: Luglio 2008

A ciascun progetto Microsoft SQL Server e a tutti i file oggetto di database in esso contenuti deve essere applicato un attributo:

Progetto / File

Attributo da applicare

Project

SqlAssemblyAttribute

Aggregato

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 di Microsoft SQL Server 2005 e non presenta parametri. Viene aggiunto al file AssemblyInfo quando si crea un progetto SQL Server.

Attributo SqlUserDefinedAggregate

Questo attributo deve essere applicato ai file di aggregati e presenta due proprietà: Format e MaxByteSize.

  • Format
    Obbligatorio. Formato di archiviazione dell'aggregato. Di seguito sono indicati i formati supportati.

    Native: indica che in SQL Server viene utilizzata una rappresentazione nativa efficiente sul disco. Questa opzione di formato è la più compressa e offre le prestazioni migliori. I requisiti per questo formato sono:

    • 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:

    • 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 ai file 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 ai file di trigger e presenta i seguenti parametri:

  • Name - Facoltativo. Specifica il nome utilizzato su SQL Server per fare riferimento al trigger.

  • Target - Obbligatorio. Specifica la tabella a cui viene applicato il 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 ai file delle funzioni definite dall'utente che restituiscono valori scalari o tabelle e presenta i seguenti parametri:

  • Name - Facoltativo. Specifica il nome utilizzato in 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 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 ai file dei tipi definiti dall'utente e presenta quattro proprietà: Format, MaxByteSize, IsFixedLength e IsByteOrdered.

  • Format
    Obbligatorio. Formato di archiviazione del tipo definito dall'utente. Di seguito sono indicati i formati supportati.

    Native: indica che in SQL Server viene utilizzata una rappresentazione nativa efficiente sul disco. Questa è l'opzione di formato più compressa e di norma offre le prestazioni migliori. I requisiti per questo formato sono:

    • 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:

    • Il tipo deve implementare l'interfaccia IBinarySerialize.

    • Il tipo deve specificare un valore per la proprietà MaxByteSize.

  • MaxByteSize
    Obbligatorio. 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 è SerializedDataWithMetadatae 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: creare un progetto SQL Server

Procedura: creare ed eseguire una stored procedure CLR di SQL Server

Procedura: creare ed eseguire un trigger CLR di SQL Server

Procedura: creare ed eseguire un aggregato CLR di SQL Server

Procedura: creare ed eseguire una funzione CLR definita dall'utente di SQL Server

Procedura: creare ed eseguire un tipo CLR definito dall'utente di SQL Server

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

Modelli di elementi per progetti SQL Server

Riferimenti

Attributi per oggetti di database e progetti SQL Server

Altre risorse

Esecuzione del debug di database CLR SQL

Cronologia delle modifiche

Data

Cronologia

Motivo

Luglio 2008

Aggiornate le informazioni relative all'attributo MaxByteSize per l'attributo SQLUserDefinedAggregate.

Correzione di errori nel contenuto.