Tsql SqlDateTime溢出

Tsql SqlDateTime溢出,tsql,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

在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上本地运行的SQL Server Management Studio中,以下代码运行良好:

insert into DebugTrace ([Log])
values ('test')
在我的工作站上运行的相同代码失败:

DebugTrace trace = new DebugTrace();
trace.Log = "test from code";
DebugTraces.InsertOnSubmit(trace);
SubmitChanges();
引发的异常是:

SqlDateTime溢出。必须在1753年1月1日12:00:00 AM和 1999年12月31日晚上11:59:59

这两个请求都不设置时间戳,而是依赖默认值来设置列值。因此,GetDate函数如何触发这样的异常


p.S.to request从不同的计算机运行,但使用相同的Windows帐户

映射到时间戳的DebugTrace属性是否具有默认值?从代码中插入时,请尝试为其指定默认值

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

您的问题是,在插入时,时间戳保持为空。因此,可能是默认值约束无法正常工作。看看这个,它精确地阐述了您的问题。

谢谢您的回答。你提到的链接有帮助。使用Linqpad执行相同的操作,可以查看实际传递给SQL server的内容:-区域参数声明p0日期时间集p0='0001-01-01 00:00:00.000'声明p1 NVarChar1000集p1='test from code'-EndRegion INSERT in[DebugTrace][Timestamp],[Log]值p0,p1选择CONVERTInt,作用域标识为[value]