SqlDateTime溢出

时间:2014-10-30 10:26:08

标签: tsql

在SQL Server 2005上,我有一个表定义如下:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[DebugTrace](
    [Timestamp] [datetime] NOT NULL CONSTRAINT [DF_DebugTrace_Timestamp]  DEFAULT (getdate()),
    [Log] [nvarchar](max) NOT NULL,
    [id] [int] IDENTITY(1,1) NOT NULL,
 CONSTRAINT [PK_DebugTrace] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

如您所见,Timestamp列的默认值设置为GetDate()。

从SQL Server Management Studio(在SQL服务器上本地运行),下面的代码运行良好:

insert into DebugTrace ([Log])
values ('test')

"相同"代码运行我的工作站失败:

DebugTrace trace = new DebugTrace();
trace.Log = "test from code";
DebugTraces.InsertOnSubmit(trace);
SubmitChanges();

抛出的异常是:

  

SqlDateTime溢出。必须在1/1/1753 12:00:00 AM之间   12/31/9999 11:59:59 PM。

两个请求都不设置Timestamp并依赖于默认值来设置列值。因此,GetDate()函数如何触发这样的异常?

P.S。请求是从不同的计算机运行,但具有相同的Windows帐户

1 个答案:

答案 0 :(得分:0)

DebugTrace的属性是否映射到TimeStamp,是否具有默认值?从代码中插入时尝试给它一个默认值

DebugTrace trace = new DebugTrace();
trace.Log = "test from code";
trace.TimeStamp= Datetime.Now; 

您的问题是插入时,时间戳保持为空。所以它可能是你的默认值约束不能正常工作。看看这个link,它会精确地阐述你的问题。