Как сделать промежуточную таблицу в SQL Server 2005? - PullRequest
0 голосов
/ 26 мая 2010

Я слышал о создании промежуточных столов, и мне интересно, как вы на самом деле это делаете.

Я хочу сделать SqlBulkCopy в промежуточной таблице. Затем обновите реальную таблицу.

Я слышал в SQL Server 2008, что вы можете использовать нечто, называемое слиянием, но я использую SQL Server 2005, поэтому я слышал, что мне нужно использовать обновление внутреннего соединения?

Я не уверен, как это будет выглядеть (я предполагаю, что лучшим способом было бы написать это в SP). Также промежуточная таблица должна быть в состоянии обрабатывать параллельные обновления.

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

Так может кто-нибудь показать мне какие-нибудь примеры или учебные пособия о том, как это сделать? И как быстро этот путь? Скажите, если ваше обновление 50000 записей, сколько времени это займет (догадка подойдет)

Редактировать

Так что теперь это мой SP. Я думаю, что это должно быть в состоянии делать параллельные соединения, но я хотел убедиться.

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[sp_MassUpdate]
@BatchNumber uniqueidentifier 
AS
BEGIN
    update Product
    set ProductQty = 50
    from Product prod
    join StagingTbl stage on prod.ProductId = stage.ProductId
    where stage.BatchNumber = @BatchNumber

    DELETE FROM StagingTbl
    WHERE BatchNumber = @BatchNumber

END

1 Ответ

2 голосов
/ 26 мая 2010

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

OK

update prod
set field1 = stage.field1
from myproductiontable prod
join mystagingtable stage on prod.somefield = stage.somefield

Чтобы добавить записи не в продукт

Insert myproductiontable (f1, f2, f3)
select stage.f1, stage.f2, stage.f3 
from mystagingtable stage
where  not exists (select someid from myproductiontable prod WHERE stage.somefield = prod.somefield)

Но у вас должно быть одно или несколько полей в промежуточной таблице, которые относятся к записям в таблице prod. Иногда вам нужно сделать дополнительное объединение, чтобы получить эти отношения.

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