小编典典

用户定义类型为表的默认值的语法

sql

假设您有一个下面的用户定义类型:

CREATE TYPE [dbo].[MyDefineType] As Table                
(
ID int NOT NULL
, Column1 int NOT NULL   
, Column2 Nvarchar(128)  NULL
, Column3 Nvarchar(128) NULL
, Column4 Nvarchar(128) NULL 
, Column5 Nvarchar(128) NULL       
)

因此,当我通过存储过程传递一个有价表时,该类型会反映该表的架构。

我的问题是为列之一提供默认值的语法是什么?例如,如果我在循环中通过存储过程传递了这些值,则可以为第5列提供默认值,因此,如果仅传递前4列的值,则如果第5列不传递给我定义的值,则默认为5值已传递。用户定义的类型可能吗?


阅读 163

收藏
2021-05-23

共1个答案

小编典典

使用常规语法(请参见CREATE TYPE和MSDN):

(如我的答案注释中所述,正确的常规语法将是使用命名约束,但是表类型不能使用命名约束,而必须使用“简写”语法)。

CREATE TYPE [dbo].[MyDefineType] As Table                
(
  ID int NOT NULL DEFAULT 0
, Column1 int NOT NULL DEFAULT 99
, Column2 Nvarchar(128) NULL DEFAULT N'DefaultValue'
, Column3 Nvarchar(128) NULL
, Column4 Nvarchar(128) NULL 
, Column5 Nvarchar(128) NULL       
)

例如,将以上定义与前三列的默认值一起使用:

DECLARE @t MyDefineType
INSERT @t VALUES (1, DEFAULT, DEFAULT, N'c', N'd', N'e')
SELECT * FROM @t

ID  Column1 Column2         Column3 Column4 Column5
1   99      DefaultValue    c       d       e
2021-05-23