在非空或空列中插入默认值

时间:2014-03-21 19:03:25

标签: sql tsql

我很困惑:

我有这个表,我想确保UserName列永远不为null,如果插入中有null,则应用默认值。

CREATE TABLE MyTable(
[UserID] [CHAR](5) NOT NULL,
[UserName] [VARCHAR](12) NOT NULL CONSTRAINT DF_UserName DEFAULT 'Visitor')

如果insert语句不包含用户名,那么我想插入一个默认值。

运行它会给我一个错误:

INSERT INTO [dbo].[MyTable]
           ([UserID]
           ,[UserName])
     VALUES
           ('12345',
           NULL)

如果将列设为null,那么即使是默认值,如果存在空值,也会返回null。

我似乎无法找到解释,I read stuff here on Google Books

我也可以在插入语句中使用CASE WHEN,但我不想掩盖我缺乏知识。

2 个答案:

答案 0 :(得分:2)

您必须排除列:

INSERT INTO [dbo].[MyTable] ([UserID]) VALUES ('12345')

或提供default关键字,如下所示:

INSERT INTO [dbo].[MyTable] ([UserID], [UserName]) VALUES ('999', DEFAULT)

答案 1 :(得分:1)

要将默认值插入该列,请不要在插入中指定列。如果没有为列指定任何内容,则应用constaint,不同明确指定null。您可以执行ISNULL(val,' Visitor')以在插入脚本中获得所需的行为。

INSERT INTO [dbo].[MyTable]
       ([UserID])
 VALUES
       ('12345')

如果要引入可以为null的变量:

INSERT INTO [dbo].[MyTable]
       ([UserID], [UserName])
 VALUES
       ('12345', ISNULL(@SomeVariable, 'Visitor'))

会给你你想要的东西。在这种情况下,您不需要约束。