在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帐户
答案 0 :(得分:0)
DebugTrace的属性是否映射到TimeStamp,是否具有默认值?从代码中插入时尝试给它一个默认值
DebugTrace trace = new DebugTrace();
trace.Log = "test from code";
trace.TimeStamp= Datetime.Now;
您的问题是插入时,时间戳保持为空。所以它可能是你的默认值约束不能正常工作。看看这个link,它会精确地阐述你的问题。