我很困惑:
我有这个表,我想确保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,但我不想掩盖我缺乏知识。
答案 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'))
会给你你想要的东西。在这种情况下,您不需要约束。