Sql-Server

如何在 SQL Server 中轉換為使用者定義的類型?

  • May 12, 2021

SQL Server 提供了創建使用者定義類型的能力CREATE TYPE

CREATE TYPE foo FROM int NOT NULL ;  

但是,沒有提及我如何使用該類型構造值。這在 之外的任何地方都可以使用CREATE TABLE嗎?我沒有運氣CASTor CONVERT

SELECT cast(1 AS foo);
Msg 243 Level 16 State 2 Line 1
Type foo is not a defined system type.

我可以看到這些類型獨立於它們的基本類型而存在

SELECT TYPE_NAME(TYPE_ID(N'foo'));

他們放在桌子上時保持這種獨立性,

CREATE TABLE bar ( a foo );
-- will list it as `foo` and not `int`
exec sp_help 'bar'

CLR 使用者定義類型可以與文件一起使用CASTCONVERT文件中所示。

從範例“我”那裡:

CREATE ASSEMBLY mytest FROM 'c:\test.dll' WITH PERMISSION_SET = SAFE;
CREATE TYPE Point EXTERNAL NAME mytest.Point;
GO  
DECLARE @p Point = CONVERT(Point, '');
SET @p.SetXY(22, 23);

您可以在Working with User-Defined Types - Manipulating UDT Data的文件中找到更多範例和使用資訊,例如

UPDATE dbo.Points  
SET PointValue.SetXY(5, 99)  
WHERE ID = 3;

別名數據類型是一種已棄用且較舊的實現。它們實際上是現有基本類型的別名,可能有限制和綁定到它們的預設值(也是不推薦使用的特性)。

我強調的CAST 文件摘錄:

data_type 目標數據類型。這包括 xml、bigint 和 sql_variant。不能使用別名數據類型。

除了表 DDL 之外,使用者定義的別名類型也可以用作局部變數:

DECLARE @v foo;

引用自:https://dba.stackexchange.com/questions/291397