使用附加列选择INTO

时间:2008-11-11 16:08:11

标签: .net sql sql-server-2005 tsql

我试图将一个表的行副本插入另一个具有相同模式的表中,并添加一列(时间戳)以提供MS Sql Server 2005中第一个表的“历史记录”。

所以,我的查询,没有附加列将是:

"SELECT INTO [WebsiteHistory] FROM [Website]"

我也希望填充时间戳列,但我不确定如何做到这一点。我想做点什么:

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

但这应该不起作用,特别是如果timestamp列不是最后一列。有没有办法做到这一点?

3 个答案:

答案 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

它获取表中所有字段的名称,以创建为该表自定义的查询。您应该能够简单地调整完全相同的技术来生成正确的字段名称。