SQL 服务器:UDT 与 UDDT?
SQL Server: UDT versus UDDT?
用户定义类型 (UDT) 和用户定义数据类型 (UDDT) 之间有什么区别?
UDTs(用户定义类型):UDT 可用于数据库对象的定义、Transact-SQL 批处理中的变量、函数和存储过程中的变量,以及函数中的参数和存储过程。
UDDTs(User Defined Data Type):用户自定义数据类型可以用于当几个表必须在一个列中存储相同类型的数据并且您必须确保这些列具有完全相同的数据时类型、长度和可空性。例如,可以基于 char 数据类型创建名为 postal_code 的用户定义数据类型。
这些是同一个概念,只是两个不同的名称。据我所知,UDT 从 SQL 2005 年开始使用,而 UDDT 可以追溯到 SQL 2000
用户定义的数据类型 (UDDT) 是简单的别名,在纯 T-SQL 中,基于 "native" 类型 SQL 服务器(即除了地理、几何和层次结构的 CLR 类型之外的所有类型)。这些是为了方便地允许数据模型的一致性,其想法是避免在以不同方式定义的表中使用相同的 "property"。
UDDT 的一个示例是将 SSN
定义为 CHAR(11)
。或者 ClientID
可能是 INT
.
用户定义类型 (UDT) 是用 SQLCLR(即 NET / CLR 集成)编写的 "complex" 类型,并且是您创建它们的任何类型成为。它们是 Geography、Geometry 和 Hierarchy 类型的基础。它们的直接表示是 VARBINARY,但您不会直接与它们交互(通常不会)。与这 3 种 CLR 类型和 XML 数据类型一样,您可以通过其中定义的方法和属性与 UDT 进行交互。它们可以同时具有静态和基于实例的方法和属性。您甚至可以覆盖用于比较它们的运算符,以便在 =
、<
或任何您决定覆盖的上下文中使用时可以进行特殊处理。
示例可以是数组/集合。您在内部存储一个集合,并公开 .Add()
、.GetByIndex()
等的方法。您可以公开 .Length
等属性。因此您可以像这样声明它:
DECLARE @VarName SchemaName.TypeName;
您可以通过属性和方法更新它:
SET @VarName = @VarName.Method(@var1, 'LiteralValue');
您可以通过属性和方法从中获取值:
SELECT @VarName.AnotherMethod(), @VarName.SomeProperty;
如果您想要显示其中一些变体的示例并且您甚至可以尝试,您可以下载 SQL# 库的免费版本(我写的,但类型是免费的)随附三个 UDT,其中之一是 Type_HashTable,手册中有一些很好的示例。您可以从手册的第 178 页(PDF 中的第 186 页)开始找到 Type_HashTable 的信息。
已接受的答案对我进行了教育,但这就是我向外行解释 UDT 与 UDDT 的方式:
UDDT 正在将基本类型自定义为 "new" 类型(请注意,在下面的示例中,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是一个"data structure",创建如下:
CREATE TYPE dbo.contactInformation
AS TABLE
(
FileID UNIQUEIDENTIFIER,
[Name] CONTACTNAME,
[FirstName] NVARCHAR(20),
[EMail] EMAILADDRESS
);
GO
根据我的经验,
UDDT 可以提高可读性并执行标准。
UDT 可以应用于 Entity Framework 上的应用程序 运行,以通过提供批量传输(而不是逐行传输)来提高应用程序和服务器之间的性能。
用户定义类型 (UDT) 和用户定义数据类型 (UDDT) 之间有什么区别?
UDTs(用户定义类型):UDT 可用于数据库对象的定义、Transact-SQL 批处理中的变量、函数和存储过程中的变量,以及函数中的参数和存储过程。
UDDTs(User Defined Data Type):用户自定义数据类型可以用于当几个表必须在一个列中存储相同类型的数据并且您必须确保这些列具有完全相同的数据时类型、长度和可空性。例如,可以基于 char 数据类型创建名为 postal_code 的用户定义数据类型。
这些是同一个概念,只是两个不同的名称。据我所知,UDT 从 SQL 2005 年开始使用,而 UDDT 可以追溯到 SQL 2000
用户定义的数据类型 (UDDT) 是简单的别名,在纯 T-SQL 中,基于 "native" 类型 SQL 服务器(即除了地理、几何和层次结构的 CLR 类型之外的所有类型)。这些是为了方便地允许数据模型的一致性,其想法是避免在以不同方式定义的表中使用相同的 "property"。
UDDT 的一个示例是将 SSN
定义为 CHAR(11)
。或者 ClientID
可能是 INT
.
用户定义类型 (UDT) 是用 SQLCLR(即 NET / CLR 集成)编写的 "complex" 类型,并且是您创建它们的任何类型成为。它们是 Geography、Geometry 和 Hierarchy 类型的基础。它们的直接表示是 VARBINARY,但您不会直接与它们交互(通常不会)。与这 3 种 CLR 类型和 XML 数据类型一样,您可以通过其中定义的方法和属性与 UDT 进行交互。它们可以同时具有静态和基于实例的方法和属性。您甚至可以覆盖用于比较它们的运算符,以便在 =
、<
或任何您决定覆盖的上下文中使用时可以进行特殊处理。
示例可以是数组/集合。您在内部存储一个集合,并公开 .Add()
、.GetByIndex()
等的方法。您可以公开 .Length
等属性。因此您可以像这样声明它:
DECLARE @VarName SchemaName.TypeName;
您可以通过属性和方法更新它:
SET @VarName = @VarName.Method(@var1, 'LiteralValue');
您可以通过属性和方法从中获取值:
SELECT @VarName.AnotherMethod(), @VarName.SomeProperty;
如果您想要显示其中一些变体的示例并且您甚至可以尝试,您可以下载 SQL# 库的免费版本(我写的,但类型是免费的)随附三个 UDT,其中之一是 Type_HashTable,手册中有一些很好的示例。您可以从手册的第 178 页(PDF 中的第 186 页)开始找到 Type_HashTable 的信息。
已接受的答案对我进行了教育,但这就是我向外行解释 UDT 与 UDDT 的方式:
UDDT 正在将基本类型自定义为 "new" 类型(请注意,在下面的示例中,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是一个"data structure",创建如下:
CREATE TYPE dbo.contactInformation
AS TABLE
(
FileID UNIQUEIDENTIFIER,
[Name] CONTACTNAME,
[FirstName] NVARCHAR(20),
[EMail] EMAILADDRESS
);
GO
根据我的经验, UDDT 可以提高可读性并执行标准。 UDT 可以应用于 Entity Framework 上的应用程序 运行,以通过提供批量传输(而不是逐行传输)来提高应用程序和服务器之间的性能。