如何使用默认约束插入无空列



这是我的示例表定义:

CREATE TABLE [MyTable] 
(
    [ColumnName] [bit] NOT NULL
)
ALTER TABLE [MyTable] ADD DEFAULT ((0)) FOR [ColumnName]

我希望能够将Null值传递给我存储过程的@ColumnValue,例如:

@ColumnValue = null;
INSERT INTO [MyTable] ([ColumnName])
VALUES (@ColumnValue)

但是我遇到了这个错误:

"不能将值插入列中...插入失败的"

"失败

为什么DEFAULT约束不起作用?

已解决:

as @j.d。pace说:仅当未在Insert语句中指定该值时,才会插入默认值。

因此,正如@dotnet所建议的,我使用 ISNULL中指定了 INSERT查询语句中的默认值:

isnull -sql Server isNull()函数可让您在表达式为null时返回替代值:

@ColumnValue = null;
INSERT INTO [MyTable] (
    [ColumnName]
)
VALUES (
    ISNULL(@ColumnValue, 0)
)

只有一列bit类型的表,默认值似乎是一个不好的设计。这些东西几乎可以肯定可以以不同的方式存储。另一方面,如果表格中没有包含在帖子中的其他列,请跳过INSERT查询中的此特定列,并且可以正常工作。最后,您也可以在INSERT查询中指定默认值。

最新更新