2013-04-09 41 views
0

我需要將表分區爲多個磁盤上的多個文件。下面是創建表。保留時間跨度列的數據,同時將表分區爲多個磁盤

我們面臨的挑戰是,在劃分這張巨大的表格時,ts時間戳數據將會丟失(將被覆蓋到新的時間戳)。我該如何避免這種情況?

CREATE TABLE [dbo].[Audit](

     [Id] [uniqueidentifier] NOT NULL, 

     [ObjectName] [varchar](150) NOT NULL, 

     [IUD] [varchar](1) NOT NULL, 

     [ts] [timestamp] NULL, 

     [username] [varchar](150) NOT NULL, 

     [IP] [varchar](50) NULL, 

     [MAC] [varchar](50) NULL, 

     [ChangeSet] [xml] NULL, 

     [Key1] [varchar](50) NULL, 

     [Key2] [varchar](50) NULL, 

     [Date] [datetime] NULL, 

CONSTRAINT [PK_Audith] 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] TEXTIMAGE_ON [PRIMARY] 

回答

0

簡短的回答是,你不能寫入時間戳。順便說一下,rowversion是新類型,時間戳已被棄用。如果您使用的是支持新類型的版本,則應該這樣做。

如果您確實需要保留舊的rowversion,則可以將其保留在varbinary列中。但是,您不知道該行在轉換後是否已更新。我想你可以在表格上放置一個觸發器,以便在轉換後將更新時的舊時間戳記NULL。然後你可以在ISNULL(OLD_TS,TS)上有一個計算列。是否值得這個單獨列的額外開銷和存儲是由它決定的。

您還可以將轉換後的新時間戳存儲在單獨的表中。您不能將它放在同一個表中,因爲更新後觸發器會增加時間戳,從而失去存儲原始時間戳的目的。而且,在插入的僞指令中,rowversion不是可用的,而是觸發器(至少在2008版本的v2中,我試過了)。但是,這意味着加入,如果你正在分區,我懷疑我們正在談論一個大型數據集。所以我更多地包含這個警告,以免試圖通過觸發器在表中存儲rowversion。

+0

這麼多的話我不能保留它。那是對的嗎?感謝您的詳細解釋。 – DarthVader 2013-04-09 15:12:15

+0

不在同一列,不。 – JAQFrost 2013-04-09 15:55:36

相關問題