2010-06-14 78 views
4

我試圖做我的IIS日誌表如下:爲什麼在SQL Server 2008中[date] +([time] - [offset])不確定?

ALTER TABLE [W3CLog] 
ADD [LogTime] AS [date] + ([time] - '1900-01-01') PERSISTED 

但是,SQL Server 2008中告訴我:

Computed column 'LogTime' in table 'W3CLog' cannot be persisted because the column is non-deterministic.

表有這樣的定義:

CREATE TABLE [dbo].[W3CLog](
    [Id] [bigint] IDENTITY(1,1) NOT NULL, 
    ... 
    [date] [datetime] NULL, 
    [time] [datetime] NULL, 
    ... 
) 

爲什麼這是非確定性的?

我真的需要索引該字段。該表目前有1598170行,並且查詢我們是否無法全時間進行索引查找是一件痛苦的事情。由於這是UNION與其他一些日誌格式,我們不能很容易地分開使用這兩列。

+0

你可以使用'CONVERT(datetime,'19000101',112)'? – Gabe 2010-06-14 13:02:40

回答

4

您的'1900-01-01'是非確定性的,因爲它取決於語言設置。當然,這是明確的DMY或MDY的設置通常會咬它的曖昧

嘗試'19000101':SQL Server將日期和時間有些奇怪:「YYYY-MM-DD」可視爲「YYYY-MM-DD」如果儘管在理論上是ISO你有英國設置

編輯:使用該刪除的日期方面:DATEADD(day, 0, DATEDIFF(day, 0, [time]))

EDIT2:1900年1月1日在日期時間格式零,所以沒有必要減去它。你可以發佈樣本數據和輸出嗎?

+0

是的,沒必要減去,的確如此。那就是訣竅。 – 2010-06-14 13:06:38

0

好吧,我明白了,感謝@ gbn的回答。

下面的三個是等效的:

SELECT TOP 100 
    [date] + ([time] - '19000101'), 
    [date] + ([time] - 0), 
    [date] + [time] 
FROM 
    dbo.[W3CLog] 

底部是確定性的。

相關問題