用户定义类型(UDT)和用户定义数据类型(UDDT)有什么区别?
SSN
定义为 CHAR(11)
。或者也可以将 ClientID
定义为 INT
。
用户定义类型 (UDT)是在 SQLCLR (即 NET/CLR 集成) 中编写的 "复杂" 类型,并且可以根据您的需要创建。它们是地理、几何和层次结构类型的基础。它们直接的表示形式是 VARBINARY,但通常您不直接与它们交互。就像这三个 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将基本类型定制为“新”类型(请注意,在以下示例中,只有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
CREATE TABLE table (colName udtType);
这个资源可能会有帮助:CLR用户定义类型 - Khalid Amin这是两个不同名称的相同概念。据我所知,UDT 自 SQL 2005 年开始使用,而 UDDT 则可以追溯到 SQL 2000。
CREATE TYPE [name] AS TABLE ( ... )
- Dai