2
上的SQL Server 2005,我定义如下表:()SQLDATETIME溢出
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]
正如你所看到的,时间戳列有一个默认值设置为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之间。
这两个请求都不设置时间戳,并依靠默认值来设置列值。因此,GetDate()函数如何触发这样的异常?
P.S.请求是从不同的计算机运行,但使用相同的Windows帐户
感谢您的回答。你提到的链接有所帮助。使用Linqpad执行相同的操作可以查看实际传递给SQL服务器的内容: - 区域参数 DECLARE p0 DateTime SET p0 ='0001-01-01 00:00:00.000' DECLARE p1 NVarChar(1000)SET p1 = '从代码测试' - EndRegion INSERT INTO [debugTrace的]([时间戳],[日志]) VALUES(P0,P1) SELECT CONVERT(中间体,SCOPE_IDENTITY())AS [值] – Jaepetto 2014-10-30 11:27:17