2008-11-11 93 views
2

我試圖從一個表插入一行的副本到另一個具有相同模式的表中,並添加了一列(時間戳)以提供第一個表的「歷史記錄」在MS SQL Server 2005中SELECT INTO與附加列

所以,我的查詢,而無需額外的列是:

"SELECT INTO [WebsiteHistory] FROM [Website]" 

我想填充時間戳列爲好,但我不知道如何更好地做到這一點。我想這樣做:

"SELECT Website.*, '" + DateTime.Now.ToShortDateString() + "' INTO [WebsiteHistory] FROM [Website]" 

但是,這不應該工作,特別是如果timestamp列不是最後一個。有沒有辦法做到這一點?

+0

絕不隱含。向列添加列不應該破壞代碼,但會破壞代碼。 – 2008-11-11 16:23:04

+0

最好讓這些事情發生在SQL服務器上,例如通過ON UPDATE觸發器。這樣你就不必在你的應用程序中煩心了。 – Tomalak 2008-11-11 17:03:05

回答

14

被警告。這工作,但它既不是不錯也不推薦:

INSERT 
    WebsiteHistory 
SELECT 
    *, 
    GETDATE() 
FROM 
    Website 
WHERE 
    Id = @WebsiteId 

這是假設WebsiteHistory具有相同的結構Website(你說了),再加上有一個額外的DATETIME場。

更好的是這樣的,因爲它是更加故障安全(犧牲的更加詳細):

INSERT 
    WebsiteHistory 
    (
    Id, 
    Field1, 
    Field2, 
    Field3, 
    Field4, 
    ModifiedDate 
) 
SELECT 
    Id, 
    Field1, 
    Field2, 
    Field3, 
    Field4, 
    GETDATE() 
FROM 
    Website 
WHERE 
    Id = @WebsiteId 
2

您不能在列上插入行時自動填充時間戳列的默認約束嗎?