Loading

那些我们想当然的错误[SQL]

无论在学习生活中,我们都会经历一些所谓“想当然”的错误,本来应该这样的,结果呢,事实上不一样。

今天介绍一个挺二的错误,也属于想当然的错误:在表news中,NewsAddTime字段使用了SQL内置函数getdate(),在插入表数据时,犯了这个想当然的错误。

且听我细细道来:

1、先上一下表结构:

CREATE TABLE [News]
(
    NewsID int PRIMARY KEY IDENTITY (1,1),
    UserID int REFERENCES[Users](UserID),
    NewsClassID int REFERENCES [NewsClass](NewsClassID)NOT NULL,
    NewsTitle nvarchar(128) NOT NULL,
    NewsDescription nvarchar(128) NULL,
    NewsReadCount int NOT NULL DEFAULT '0',
    NewsAddTime datetime DEFAULT getdate() NOT NULL,--使用了getdate()函数。
    NewsContents nvarchar(max) NULL,
    NewsPictureUri nvarchar(max) NULL,
    NewsKeyWords nvarchar(128) NULL ,
)

2、在使用Insert into 语句插入数据时:

错误代码
INSERT INTO [jwyweb].[dbo].[News]
           ([UserID]
           ,[NewsClassID]
           ,[NewsTitle]
           ,[NewsDescription]
           ,[NewsReadCount]
           ,[NewsAddTime]
           ,[NewsContents]
           ,[NewsPictureUri]
           ,[NewsKeyWords])
     VALUES
           ('1'
           ,'7'
           ,'喜讯-我司喜获“闵行区工人发明家”等荣誉'
           ,'2012年4月29日,我公司XXX同志,荣获“工人发明家”二等奖。'
           ,'1'
           ,''
           ,'2012年4月29日,我公司XXX同志,荣获“XXX工人发明家”二等奖。'
           ,''
           ,'喜讯')

在插入NewsAddTime时,当时就想该字段既然使用了默认函数返回当前时间,那么给他个空值吧【想当然了】,结果过我查询了News表返回的结果:【有点无厘头】

 

咦?咦?咦?咦?

怎么搞来了个1900-01-01 00:00:00.000顿时不得其解。各种查资料:

结果:SQL若字段定义的类型为datetime,插入为''(空),那么会默认值为1900-01-01 00:00:00.000

解决:

 

select getdate() as currenttime
select * from news
select cast('' as datetime),cast(nullif('','') as datetime)
,isnull(cast(nullif('','') as datetime),getdate())

 

我不死心呐,结果有了这么一条语句:

去掉NewsAddTime列
INSERT INTO [jwyweb].[dbo].[News]
           ([UserID]
           ,[NewsClassID]
           ,[NewsTitle]
           ,[NewsDescription]
           ,[NewsReadCount]
           ]
           ,[NewsContents]
           ,[NewsPictureUri]
           ,[NewsKeyWords])
     VALUES
           ('1'
           ,'7'
           ,'喜讯-我司喜获“闵行区工人发明家”等荣誉'
           ,'2012年4月29日,我公司XXX同志,荣获“工人发明家”二等奖。'
           ,'1'
           
           ,'2012年4月29日,我公司XXX同志,荣获“XXX工人发明家”二等奖。'
           ,''
           ,'喜讯')

查询结果:【正常了,o yeah】

这样不能算完了,继续学习

找到了一个前辈写的此情况问题

请移步—————————————详解

【待续】

 本文版权归本人和博客园共同所用,转载请注明出处。

 

posted @ 2012-06-15 09:53  Cooper_Liu  阅读(269)  评论(0编辑  收藏  举报