SQL Server:UDT与UDDT?

问题描述 投票:5回答:4

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

sql-server tsql sqlclr user-defined-types user-defined-data-types
4个回答
4
投票

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

UDDT的一个例子是将SSN定义为CHAR(11)。或者也许ClientID将是INT

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

一个例子可以是数组/集合。你在内部存储一个集合,并为.Add().GetByIndex()等公开方法。你可以公开.Length等属性。所以你会声明它像:

DECLARE @VarName SchemaName.TypeName;

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

SET @VarName = @VarName.Method(@var1, 'LiteralValue');

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

SELECT @VarName.AnotherMethod(), @VarName.SomeProperty;

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


0
投票

UDTs(用户定义类型):UDT可用于数据库对象的定义,Transact-SQL批处理中的变量,函数和存储过程中的变量,以及函数和存储过程中的参数。

UDDTs(用户定义的数据类型):当多个表必须在列中存储相同类型的数据时,可以使用用户定义的数据类型,并且必须确保这些列具有完全相同的数据类型,长度和可空性。例如,可以基于char数据类型创建名为postal_code的用户定义数据类型。


0
投票

接受的答案教育了我,但这就是我如何向不熟悉的人解释UDT与UDDT:

UDDT将基本类型自定义为“新”类型(请注意,在下面的示例中,CONTACTNAME和EMAILADDRESS之间只有长度不同)。

CREATE TYPE CONTACTNAME FROM NVARCHAR(130) NOT NULL
CREATE TYPE EMAILADDRESS FROM NVARCHAR(50) NOT NULL
CREATE TYPE BIRTHDAY FROM DATE NULL
CREATE TYPE BIRTHTIME FROM DATETIME NULL

UDT是一个“数据结构”,创建如下:

CREATE TYPE dbo.contactInformation
AS TABLE
(
  FileID UNIQUEIDENTIFIER,
  [Name] CONTACTNAME,
  [FirstName] NVARCHAR(20),
  [EMail] EMAILADDRESS
);
GO

根据我的经验,UDDT可以提高可读性,并强制执行标准。 UDT可以应用于在Entity Framework上运行的应用程序,通过提供批量传输(而不是逐行传输)来提高应用程序和服务器之间的性能。


-1
投票

这些是具有两个不同名称的相同概念。自SQL 2005以来,AFAIK,UDT一直在使用,UDDT又回到了SQL 2000

© www.soinside.com 2019 - 2024. All rights reserved.