Jeśli trzeba usunąć wiersze ciągu Data Flow Task, następnie trzeba użyć transformacji OLE DB Command
i napisać DELETE jak DELETE FROM dbo.Table WHERE ColumnName = ?
. Następnie w odwzorowaniach kolumn transformacji poleceń OLE DB zmapujesz parametr reprezentowany przez znak zapytania danymi pochodzącymi z poprzedniej transformacji. W twoim przypadku dane pochodzące z Unii Wszystkie 2.
Jednak nie polecam tej opcji, ponieważ Polecenie OLE DB wykonuje dla każdego wiersza i może spowolnić pakiet, jeśli jest za dużo wierszy.
Polecam coś takiego:
przekierować wyjście z Union All 2
do tabeli tymczasowej pomostowym (słownie dbo.Staging) używając OLE DB Destination.
Załóżmy, że ostateczny stół docelowy to dbo.Destination. Teraz Twoja tabela pomostowa zawiera wszystkie rekordy, które powinny zostać usunięte z tabeli Miejsce docelowe.
Na Przepływ sterowania karcie , umieścić Execute SQL Task
po Data Flow Task
. W Execute SQL Task napisz instrukcję SQL lub użyj procedury przechowywanej, która wywoła instrukcję SQL, aby dołączyć do rekordów między etapami i miejscem docelowym, aby usunąć wszystkie pasujące wiersze z tabeli docelowej.
Umieść także inne zadanie wykonywania SQL przed zadaniem przepływu danych. W tym Execute SQL Task usuń/obcnij wiersze z tabeli pomostowej.
Coś w tym stylu może działać, aby usunąć wiersze :.
DELETE D
FROM dbo.Destination D
INNER JOIN dbo.Staging S
ON D.DestinationId = S.StagingId
Nadzieję, że pomaga.
To brzmi jak dobry plan.Spróbuję teraz i pokażę ci wyniki. Dziękuję Ci Siva! –
Btw, jaka jest Twoja sugestia dotycząca zrobienia tabeli dbo.Staging? Utwórz nowe zadanie przepływu danych, które spowoduje usunięcie tej tabeli? Czy mogę usunąć tylko dane i pozostawić tam zawsze tabelę tymczasową? –