SQL SEVER 某 字段的数据类型是datetime,如果我设置他不能为空,那么我再插入数据时如果不插入这个字段的值,他会默认是系统的时间吗?
如果不是,那么怎么让这个字段的值为系统时间
------解决思路----------------------
使用getdate()作为默认值,否则不创建日期
------解决思路----------------------
会默认是系统的时间吗?
当然不是,是NULL
如果不是,那么怎么让这个字段的值为系统时间
参考以下,修改表结构,添加默认约束
ALTER TABLE 表名 ADD CONSTRAINT 约束名称 DEFAULT GETDATE()FOR 时间列名
------解决思路----------------------
create table x(id int , d datetime default getdate())
go
insert into x(id) values(1)
insert into x(id) values(2)
insert into x(id) values(3)
go
select * from x
go
drop table x
go
id d
----------- -----------------------
1 2015-01-16 13:53:54.347
2 2015-01-16 13:53:54.347
3 2015-01-16 13:53:54.350
(3 行受影响)
------解决思路----------------------
如果插入的字符串满足SQLSERVER对识别条件,可以用字符串插入,一般用yyyy-MM-dd HH:mm:ss格式的即可
------解决思路----------------------
C#最好是转成datetime类型,然后通过SqlCommander的参数、DataTable的字段等赋值,不要直接拼SQL。
这样就和SQL Server的语言设置无关,最保险了。
------解决思路----------------------
SqlCommand cmd = new SqlCommand("INSERT INTO user(name,birthday) VALUES(@name,@birthday)", cn);
cmd.Parameters.Add ("@name", "张三");
cmd.Parameters.Add ("@birthday", DateTime.Parse("2000-01-01"));
cmd.ExecuteNonQuery();
------解决思路----------------------
那只眼睛看到有存储过程了!这就是标准的写法。
------解决思路----------------------
将默认值设为:getdate()
insert into test values(default)
------解决思路----------------------
A)你不会把默认值写成字符串 'getdate()' 了吧?
B)这个 test 表只有一个字段?