SQL Server 项目和数据库对象的属性

更新: 2008 年 7 月

属性必须应用于所有 Microsoft SQL Server 项目以及每个项目包含的所有数据库对象文件:

项目/文件

必须应用的属性

项目

SqlAssemblyAttribute

聚合

SqlUserDefinedAggregateAttribute

存储过程

SqlProcedureAttribute

触发器

SqlTriggerAttribute

用户定义函数

SqlFunctionAttribute

用户定义的类型

SqlUserDefinedTypeAttribute

SqlAssembly 属性

此属性必须应用于部署到 Microsoft SQL Server 2005 数据库的所有程序集。此属性没有任何参数。当创建 SQL Server 项目时,该属性即被添加到 AssemblyInfo 文件。

SqlUserDefinedAggregate 属性

此属性必须应用于聚合文件。此属性 (Attribute) 具有两个属性 (Property):Format 和 MaxByteSize。

  • Format
    必需。聚合的存储格式。支持的格式为:

    Native - 指定 SQL Server 在磁盘上使用一种高效的本机表示形式。该格式选项最为紧凑,并能提供最佳性能。此格式的要求为:

    • StructLayout.LayoutKindSequential 属性必须应用于该聚合。

    • 聚合的所有字段必须能直接复制到本机结构中,即它们在托管和非托管内存中必须有一种公共表示形式,并且不需要由互操作封送拆收器进行特殊处理。

    • 该聚合不能指定 MaxByteSize 的值。

    • 聚合不能有任何 [NonSerialized] 字段。

    • 字段不能标记为显式布局。

    UserDefined - 指定用户对二进制格式具有完全控制。此格式的要求为:

    • 该聚合必须实现 IBinarySerialize 接口。

    • 该聚合必须指定 MaxByteSize 的值。

  • MaxByteSize
    该聚合的实例的最大大小,以字节为单位。仅当 Format 设置为 UserDefined 时是必需的。不能在 Format 设置为 Native 时指定。

此示例指定聚合的 Format 为 Native。

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

SqlProcedure 属性

此属性必须应用于存储过程文件。此属性具有以下参数:

  • Name - 可选项。指定 SQL Server 上用于引用存储过程的名称。

此示例指定使用名称 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 属性

该属性必须应用于触发器文件。此属性具有以下参数:

  • Name - 可选项。指定在 SQL Server 上用于引用触发器的名称。

  • Target - 必选项。指定应用触发器的表。

  • Event - 必选项。指定激活触发器的操作。

此示例指定通过更新 authors 表中的现有数据 (UPDATE) 来激活触发器。

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()
    {
        //...
    }
}

此示例指定使用名称 trig_onpubinsert 引用触发器。通过向 publishers 表中添加新数据 (INSERT) 来激活触发器。

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()
    {
        //...
    }
}

SqlFunction 属性

此属性必须应用于可返回标量值或表的、用户定义的函数文件。此属性具有以下参数:

  • Name - 可选项。指定在 SQL Server 中引用用户定义函数时使用的名称。

    说明:

    对于返回值为表的函数,必须指定其 TableDefinition 属性值,该属性值包含所返回表的定义的 SQL 表示形式。

此示例指定使用名称 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 "";
    }
}

此示例指定使用名称 sp_tableFunc 引用用户定义的函数。TableDefinition 属性具有值 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 属性

该属性必须应用于用户定义的类型文件。它有四个属性:Format、MaxByteSize、IsFixedLength 和 IsByteOrdered。

  • Format
    必需。用户定义的类型的存储格式。支持的格式为:

    Native - 指定 SQL Server 在磁盘上使用一种高效的本机表示形式。这是最精简的选择,通常会产生最好的性能。此格式的要求为:

    • StructLayout.LayoutKindSequential 属性必须应用于该类型。

    • 用户定义类型的所有字段必须能直接复制到本机结构中,即它们在托管和非托管内存中必须有一种公共表示形式,并且不需要互操作封送拆收器进行特殊处理。

    • 该类型不能指定 MaxByteSize 的值。

    • 该类型不能有任何 [NonSerialized] 字段。

    • 字段不能标记为显式布局。

    UserDefined - 指定用户对二进制格式具有完全控制。此格式的要求为:

    • 该类型必须实现 IBinarySerialize 接口。

    • 该类型必须指定 MaxByteSize 的值。

  • MaxByteSize
    必需。此类型实例的最大大小,以字节为单位。

  • IsFixedLength
    可选。指定该类型的所有实例长度是否相同。默认值为 false。

  • IsByteOrdered
    可选。指定该类型的二进制表示形式是否已排序,即是否可以使用它比较该类型的实例。默认值为 false。

此示例指定用户定义的类型的 Format 为 SerializedDataWithMetadata,且 MaxByteSize 为 8000 字节。

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

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

请参见

任务

如何:创建 SQL Server 项目

如何:创建和运行 CLR SQL Server 存储过程

如何:创建和运行 CLR SQL Server 触发器

如何:创建和运行 CLR SQL Server 聚合

如何:创建和运行 CLR SQL Server 用户定义的函数

如何:创建和运行 CLR SQL Server 用户定义的类型

演练:使用托管代码创建存储过程

如何:调试 SQL CLR 存储过程

概念

SQL Server CLR 集成简介

使用托管代码创建数据库对象的好处

SQL Server 项目的项模板

参考

SQL Server 项目和数据库对象的属性

其他资源

SQL CLR 数据库调试

修订记录

日期

修订记录

原因

2008 年 7 月

更新了有关 SQLUserDefinedAggregate 属性的 MaxByteSize 属性的信息。

内容 Bug 修复