Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何使用默认约束向NOTNULL列插入null值_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 如何使用默认约束向NOTNULL列插入null值

Sql 如何使用默认约束向NOTNULL列插入null值,sql,sql-server,tsql,Sql,Sql Server,Tsql,以下是我的示例表格定义: 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)

以下是我的示例表格定义:

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)
但我得到了一个错误:

“无法将值NULL插入列…插入失败,原因为”


为什么
DEFAULT
约束不起作用?

只有一列
bit
类型且具有默认值的表似乎是一种糟糕的设计。几乎可以肯定的是,这些东西可以用不同的更好的方式储存。另一方面,如果表中还有其他列没有包含在post中,只需在
INSERT
查询中跳过此特定列即可。最后,您还可以在
INSERT
查询中指定默认值。


正如@J.D.Pace所说:只有在
Insert
语句中未指定默认值时,才会插入默认值

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

ISNULL-SQL Server ISNULL()函数允许您在表达式为NULL时返回一个可选值:


如果请求的插入未为字段指定值,则将插入默认值。您正在为该字段指定NULL。如果可能,请修改您的insert以完全排除该字段,或者修改执行insert的应用程序以了解并提供默认值。这只是一个示例,我不能跳过该列,因为它的值已传递到存储过程的参数中。您不能在SP中使用
If/ELSE
,如果传递的参数为NULL或非NULL,则使用两个不同的查询。
@ColumnValue = null;

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