【发布时间】:2014-10-30 18:41:21
【问题描述】:
在 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 Server 上本地运行),以下代码运行良好:
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 到 9999 年 12 月 31 日晚上 11:59:59。
两个请求都没有设置 Timestamp 并且依赖默认值来设置列值。那么GetDate()函数怎么会触发这样的异常呢?
附:请求是从不同的机器上运行但使用相同的 Windows 帐户
【问题讨论】:
标签: tsql