为什么SQL中设置的缺省值不起作用?

Riygpw 2010-05-14 04:43:34
在设计SQL数据表时,我为一些字段指定了缺省值,非空。然后在ASP.NET应用程序中定义一个插入方法,如果这个插入方法中不包括已定义好缺省值的字段,在执行这个方法时就会报数据库不允许空的错误。
也就是必须在插入方法中包括定义好缺省值的字段并提供相应的值,才能正确插入。
但是有一个例外:就是字段类型为INT,且指定为标识和自动增量时,则插入方法可以不包括这个字段。
但是直接在SQL数据库插入数据时,又可以不提供定义了缺省值的字段的值。

为什么?
...全文
278 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
数据库肯定设置了此字段不允许为空的选项了。
liuyangfang 2010-08-11
  • 打赏
  • 举报
回复
我也出现过同样的情况
gdchzgj 2010-06-09
  • 打赏
  • 举报
回复
不断学习哈
Riygpw 2010-05-17
  • 打赏
  • 举报
回复
感谢各位指导。不过我这里的情况是:
1)在SQL2005管理控制台中,建立一张表,比如TABLE吧,其中一个字段FIELD B,指定缺省值:1;这个时候不管是在GUI中还是用SQL查询分析器,均可以不指定FIELD B的值,插入记录时,FIELD 孤值会自动记录为1;
2)现在我在VS中建立一个强类型的数据集,并为表TABLE建立一个TABLEADAPTER,在主查询中并没有包含FIELD B这个字段,并自动生成INSERT方法,那么在执行这个方法时,系统就会报错:数据库不允许为空。
3)也就是必须在主查询中包含这个有默认值的字段FIELD B,并在执行插入时指定FIELD B的值,才不会报错。
老黎 2010-05-14
  • 打赏
  • 举报
回复

--这个吧
insert tb
values('val','val2',default) --default是对应默认值的字段。
fa_ge 2010-05-14
  • 打赏
  • 举报
回复
有可以没有指定到这一列
htl258_Tony 2010-05-14
  • 打赏
  • 举报
回复
--如果你这样就会出错,估计你是类似这样操作的:

INSERT tb VALUES (11,21,NULL)
/*
消息 515,级别 16,状态 2,第 1 行
不能将值 NULL 插入列 'c',表 'mydb.dbo.tb';列不允许有 Null 值。INSERT 失败。
语句已终止。
*/
chuifengde 2010-05-14
  • 打赏
  • 举报
回复
DECLARE @a table(a INT NOT NULL default(3),b INT)
INSERT @a(b) values(1)
INSERT @a(a,b)values(8,2)
INSERT @a(a,b)values(default,3)

SELECT * FROM @a

--result
/*a b
----------- -----------
3 1
8 2
3 3

(所影响的行数为 3 行)

*/
htl258_Tony 2010-05-14
  • 打赏
  • 举报
回复
IF OBJECT_ID('[tb]') IS NOT NULL
DROP TABLE [tb]
GO
CREATE TABLE [tb] (a int,b int,c int not null default 100)

--1.
INSERT tb(a,b) VALUES (10,20)

SELECT * FROM TB
/*
a b c
----------- ----------- -----------
10 20 100

(1 行受影响)
*/

--2.
INSERT tb VALUES (11,21,default)

SELECT * FROM TB
/*
a b c
----------- ----------- -----------
10 20 100
11 21 100

(2 行受影响)

*/
永生天地 2010-05-14
  • 打赏
  • 举报
回复
这个没有什么为什么,自增和一般的默认值不同,如果设默认,就不要设not null了
否则插入是不给值,就抱错了
htl258_Tony 2010-05-14
  • 打赏
  • 举报
回复
插入的时候可以参考这两种方式:

--1.
insert tb(col1,col2) --这里不含默认值的字段
values('val1','val2')

--2.
issert tb
values('val','val2',default) --default是对应默认值的字段。
htl258_Tony 2010-05-14
  • 打赏
  • 举报
回复
看看你的表结构和测试数据
sql_sf 2010-05-14
  • 打赏
  • 举报
回复
插入的时候指定字段了没有?

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧