SQL Server:UDT与UDDT?

Ben*_*jin 5 t-sql sql-server sqlclr user-defined-types user-defined-data-types

用户定义的类型(UDT)和用户定义的数据类型(UDDT)有什么区别?

Sol*_*zky 5

用户定义的数据类型 (UDDT)是纯 T-SQL 中的简单别名,基于 SQL Server 附带的“本机”类型(即除地理、几何和层次结构的 CLR 类型之外的所有类型)。这些是为了方便实现数据模型的一致性,其想法是避免在以不同方式定义的表之间具有相同的“属性”。

UDDT 的一个示例是定义SSNCHAR(11). 或者也许ClientID会是INT

用户定义类型 (UDT)是用 SQLCLR(即 NET / CLR 集成)编写的“复杂”类型,并且是您创建的任何类型。它们是地理、几何和层次结构类型的基础。它们的直接表示是 VARBINARY,但您不直接与它们交互(通常不会)。与这 3 个 CLR 类型和 XML 数据类型一样,您可以通过 UDT 中定义的方法和属性与它们进行交互。它们可以具有静态和基于实例的方法和属性。您甚至可以覆盖用于比较它们的运算符,以便在 、 或您决定覆盖的任何内容的上下文中使用时可以进行特殊=处理<

一个例子可以是数组/集合。您在内部存储一个集合,并公开.Add().GetByIndex()等的方法。您可以公开诸如.Length等的属性。因此您可以将其声明为:

DECLARE @VarName SchemaName.TypeName;
Run Code Online (Sandbox Code Playgroud)

您可以通过属性和方法更新它:

SET @VarName = @VarName.Method(@var1, 'LiteralValue');
Run Code Online (Sandbox Code Playgroud)

您可以通过属性和方法从中获取值:

SELECT @VarName.AnotherMethod(), @VarName.SomeProperty;
Run Code Online (Sandbox Code Playgroud)

如果您想要显示其中一些变体并且甚至可以使用的示例,您可以下载SQL#库的免费版本(我编写的,但类型是免费的),它附带三个 UDT,其中之一是Type_HashTable手册中有一些很好的例子。您可以从手册的第 178 页(PDF 中的第 186 页)开始找到Type_HashTable的信息。