2008-11-11 49 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

您不能在列上插入行时自动填充时间戳列的默认约束吗?