ВЫБРАТЬ ВТО с дополнительным столбцом - PullRequest
2 голосов
/ 11 ноября 2008

Я пытаюсь вставить копию строки из одной таблицы в другую таблицу с той же схемой, с добавлением одного столбца (отметка времени), чтобы обеспечить «историю» первой таблицы в MS Sql Server 2005.

Итак, мой запрос без дополнительного столбца будет:

"SELECT INTO [WebsiteHistory] FROM [Website]"

Я также хочу заполнить столбец отметки времени, но не знаю, как лучше всего это сделать. Я хотел бы сделать что-то вроде:

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

Но это не должно работать, особенно если столбец отметки времени не последний. Есть ли способ сделать это?

Ответы [ 3 ]

14 голосов
/ 11 ноября 2008

Будьте предупреждены. Это работает, но это не приятно и не рекомендуется:

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 голосов
/ 11 ноября 2008

Не можете ли вы установить ограничение по умолчанию для столбца, который будет автоматически заполнять столбец отметки времени при вставке строки в таблицу?

0 голосов
/ 11 ноября 2008

Посмотрите на принятый ответ на этот вопрос: Динамически ищите имена столбцов для таблицы в SQL-запросе

Извлекает имена всех полей в таблице, чтобы создать запрос, настроенный для этой таблицы. Вы должны иметь возможность просто адаптировать точно такую ​​же технику для генерации правильных имен полей здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...