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

时间:2014-10-15 19:33:31

标签: sql sql-server-2008 tsql

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

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       
)

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

我的问题是为其中一列提供defualt值的语法是什么?例如,如果我通过循环中的存储过程传递这些值,我可以给第5列一个默认值,所以如果我只传递前4列的值,那么5将默认为我定义的值,如果没有价值通过了。这可能是用户定义的类型吗?

1 个答案:

答案 0 :(得分:8)

使用普通语法(请参阅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