使用附加列选择INTO

sgi*_*ons 2 .net sql t-sql sql-server-2005

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

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

"SELECT INTO [WebsiteHistory] FROM [Website]"
Run Code Online (Sandbox Code Playgroud)

我也希望填充时间戳列,但我不确定如何最好地执行此操作.我想做点什么:

"SELECT Website.*, '" + DateTime.Now.ToShortDateString() + "' INTO [WebsiteHistory] FROM [Website]"
Run Code Online (Sandbox Code Playgroud)

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

Tom*_*lak 14

被警告.这有效,但既不也不值得推荐:

INSERT
  WebsiteHistory
SELECT
  *,
  GETDATE()
FROM
  Website
WHERE
  Id = @WebsiteId
Run Code Online (Sandbox Code Playgroud)

这假定WebsiteHistory具有与Website(你说它有)相同的结构,另外还有一个额外的DATETIME字段.

更好的是,因为它更加安全无虞(以更冗长的代价为代价):

INSERT
  WebsiteHistory
  (
  Id,
  Field1,
  Field2,
  Field3,
  Field4,
  ModifiedDate
  )
SELECT
  Id,
  Field1,
  Field2,
  Field3,
  Field4,
  GETDATE()
FROM
  Website
WHERE
  Id = @WebsiteId
Run Code Online (Sandbox Code Playgroud)