Переместите строки между таблицами в SQL

Desktop Outlook 2007, 2010, 2013, 2016 и 2019 используют код рендеринга HTML в Word, тогда как в Интернете он отображается браузером пользователя на месте.

Outlook 97-2003 использовал mshtml.dll (он же Trident, движок Internet Explorer) для рендеринга электронных писем в формате HTML. Поскольку Outlook использовал Word для создания электронных писем в формате HTML, но использовал Internet Explorer для их просмотра, это делало внешний вид электронной почты непоследовательным для пользователей Outlook - Microsoft решила использовать Word как для создания, так и для просмотра - что, на мой взгляд, было колоссальной ошибкой, сдерживающей HTML электронная почта десятилетиями и продолжает сдерживать ее, поскольку теперь она является наименьшим общим знаменателем (это потому, что поддержка Word функций HTML и CSS немного превосходит поддержку Internet Explorer 5.x, поэтому забудьте об использовании таких вещей, как Flexbox и CSS Grids ).

5
задан BCS 18 November 2008 в 22:21
поделиться

8 ответов

Флаги состояния являются Вашим другом.

UPDATE old_data SET move="MARKED";
INSERT INTO somewhere... SELECT where move="MARKED";
DELETE FROM old_data WHERE move="MARKED";

Если Вы сделаете это с Автоматической фиксацией прочь, то она захватит блокировки повсеместно.

Можно ФИКСИРОВАТЬ после каждого шага, если Вы хотите сделать немного меньше блокировки.

8
ответ дан 18 December 2019 в 08:32
поделиться

(В MS SQL, по крайней мере), Вы могли использовать транзакции и блокирующие подсказки:

begin tran

insert into inactive
select * from active with (updlock)
where ...

delete from active
where ...

commit tran

Не блокируя подсказку (updlock) мертвые блокировки может произойти, если кто-то действительно изменяет удаляемые записи.

4
ответ дан 18 December 2019 в 08:32
поделиться

Ваша поддержка БД ВЫХОДНОЙ Пункт? Затем это могло быть идеальным и легким для следования за решением для Вас, не так ли?

http://msdn.microsoft.com/en-us/library/ms177564.aspx

delete active with (readpast)
output DELETED.*
into inactive
where ...
4
ответ дан 18 December 2019 в 08:32
поделиться

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

Метод для блокировки строк варьируется брендом базы данных, и Вы не указываете это в своем вопросе.

1
ответ дан 18 December 2019 в 08:32
поделиться

Объявите локальный var таблицы и поместите значения в там, вставьте их в свою неактивную таблицу, затем удалите строки из активной таблицы, которые находятся в Вашем локальном списке.

Идея транзакции работает точно также хотя также.

1
ответ дан 18 December 2019 в 08:32
поделиться

Любое использование столбец уникального идентификатора как

delete from active where rowid in (select rowid in inactive)

или

delete from active as a 
where exists (select * 
              from inactive 
              where pkfld1=a.pkfld1 
              and pkfld2=a.pkfld2)

Кроме того, не забывайте переносить этот процесс в транзакцию.

Удачи.

1
ответ дан 18 December 2019 в 08:32
поделиться

Это - то, как я сохраняю мой где пункты:

DECLARE @MyTable TABLE
(
  TheKey int PRIMARY KEY
)
--
INSERT INTO @MyTable(TheKey)
SELECT TheKey FROM SourceTable WHERE rows I want
--
INSERT INTO Inactive(fieldlist)
SELECT fieldlist
FROM Active
WHERE TheKey IN (SELECT TheKey FROM @MyTable)
--
DELETE
FROM Active
WHERE TheKey IN (SELECT TheKey FROM @MyTable)

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

0
ответ дан 18 December 2019 в 08:32
поделиться

Почему у Вас есть две таблицы, а не столбец для "IsActive"?

0
ответ дан 18 December 2019 в 08:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: