Массовое копирование и удаление в OneTransaction - PullRequest
1 голос
/ 01 июня 2009

В приложении C # мне нравится копировать данные таблицы с одного сервера (SQLServer2000) на другой сервер (SQLServer2005). Мне нравится копировать данные в одном экземпляре и удалять существующие данные в таблице SQL Server 2000. Мне нужно сделать все это (массовое копирование и удаление) в одной транзакции. Как этого добиться?

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

Ответы [ 3 ]

1 голос
/ 01 июня 2009

Чтобы минимизировать продолжительность транзакции, я всегда делаю это путем массового копирования в таблицу staging (та же схема, но с другим именем - без индексов и т. Д.), А затем, когда все данные находятся в сервер, сделайте что-то вроде:

BEGIN TRAN

DELETE FROM FOO

INSERT FOO ...
SELECT ...
FROM FOO_STAGING

COMMIT TRAN

DELETE FROM FOO_STAGING

(транзакция может быть либо в TSQL, либо в соединении через управляемый код или через TransactionScope; TSQL может быть либо в виде текстовой команды, либо в виде SPROC)

0 голосов
/ 20 июня 2009

В дополнение к предложению о связанном сервере вы также можете использовать SSIS, что является моим предпочтительным методом.

0 голосов
/ 02 июня 2009

Вы можете сделать это, используя связанных серверов , хотя я никогда не пытался делать это между SQL2005 и экземпляром SQL2000. На вашем экземпляре SQL2005:

sp_addlinkedserver Sql2000Server --Only need to do this once on the server

BEGIN TRAN

INSERT INTO dbo.MyTable (id, column) 
    SELECT id, column FROM Sql2000Server.MyDatabase.dbo.MyTable
DELETE FROM Sql2000Server.MyDatabase.dbo.MyTable
--etc...

COMMIT TRAN

См. Книги Microsoft в Интернете, чтобы узнать о синтаксисе добавления / удаления связанных серверов (http://msdn.microsoft.com/en-us/library/ms190479.aspx)

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