假设您有一个下面的用户定义类型:
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值已传递。用户定义的类型可能吗?
使用常规语法(请参见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