我试图将一个表的行副本插入另一个具有相同模式的表中,并添加一列(时间戳)以提供MS Sql Server 2005中第一个表的“历史记录”。
所以,我的查询,没有附加列将是:
"SELECT INTO [WebsiteHistory] FROM [Website]"
我也希望填充时间戳列,但我不确定如何做到这一点。我想做点什么:
"SELECT Website.*, '" + DateTime.Now.ToShortDateString() + "' INTO [WebsiteHistory] FROM [Website]"
但这应该不起作用,特别是如果timestamp列不是最后一列。有没有办法做到这一点?
答案 0 :(得分: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
答案 1 :(得分:2)
无法在对表中插入行时自动填充时间戳列的列上设置默认约束吗?
答案 2 :(得分:0)
查看此问题的已接受答案:Dynamically look up column names for a table while in an sql query
它获取表中所有字段的名称,以创建为该表自定义的查询。您应该能够简单地调整完全相同的技术来生成正确的字段名称。