2009-10-28 15 views
6

Piszę program do aktualizowania danych SQL do konwersji starych kolumn typu text/ntext/image na varchar/nvarchar/varbinary. Aktualizacje są uruchamiane w ramach transakcji, gdy system uruchamia się, aby zaktualizować bazę danych ze starszej wersji. Dostałem SQL do samodzielnej pracy, ale kilka kolumn, które zostały zmienione, zostało zindeksowanych pełnotekstowo, co oznacza, że ​​nie mogę zmienić ich typu bez wcześniejszego opuszczenia indeksu, tak jak:Zmiana kolumny indeksowanej pełnotekstem w ramach transakcji

ALTER FULLTEXT INDEX ON Table DROP (Column)
exec dbo.ConvertDataType 'Table', 'Column', 'nvarchar(max)'
ALTER FULLTEXT INDEX ON Table ADD (Column)

Problem polega na tym, że pierwszy wiersz nie działa w programie do aktualizacji danych z powodu błędu "Instrukcja ALTER FULLTEXT INDEX nie może być użyta w transakcji użytkownika." Czy jest jakiś sposób, aby tak się stało w ramach transakcji? Albo przez wykonanie tego kodu, albo zmianę indeksu na nowy typ w jakiś inny sposób?

Odpowiedz

9

Nie. Wiele zmian DDL nie działa w kontekście transakcji, ponieważ nie mogą zagwarantować wycofania zmian. Dopóki instrukcja modyfikuje niektóre wewnętrzne metadane bazy danych, istnieje szansa, że ​​jest obsługiwana wewnątrz transakcji, ponieważ wycofanie jest obsługiwane przez zwykłe wycofywanie aktualizacji z tabel baz danych. Jednak wyciągi, które tworzą pliki, otwarte gniazda, łączą się z usługami zewnętrznymi (takimi jak usługa indeksowania pełnotekstowego), nie mogą wycofywać zmian, więc nie są obsługiwane w ramach transakcji.