2015-05-14 8 views
6

Używam SSDT do synchronizowania 2 baz danych.Zamiast zmieniać nazwę kolumny projekt robi kolumnę kropla i kolumna dodaje

Aby to zrobić, mam bazę danych w Server1, bazę danych w Server2 i Schemat w moim projekcie.

Zawsze wprowadzam zmiany w bazie danych serwera1 i stosuję te zmiany w bazie danych serwera2. Aby to zrobić, używam ten obieg:

  • Porównaj bazy Serwer1 do schematu i zaktualizować schemat z Serwer1 zmienia
  • Porównaj schematu do bazy server2 i aktualizacja zmienia ze schematu w bazie danych

Zwykle działa dobrze, ale napotkałem problem podczas ostatniej zmiany nazw kolumn w tabeli.

Zwykle zmiana nazwy kolumn w tabeli powoduje zmianę zmiany nazwy kolumny, więc gdy porówna się serwer1 ze schematem, nazwy kolumn są poprawnie wykrywane i mogę bezpiecznie zakończyć przepływ pracy.

Jednak ostatni raz, gdy zmieniłem nazwę kolumn w tabeli w Server1, podczas porównywania ze schematem, zamiast wykrywania zmiany jako zmiany nazwy kolumny, wykryło zmianę jako kolumnę kropli (ze starą nazwą) i utwórz kolumnę (z nową nazwą). Oczywiście, jeśli zastosuję te zmiany w bazie danych Server2, stracę wszystkie dane w kolumnie o zmienionej nazwie.

Czy jest jakiś powód takiego zachowania w SSDT? Czy mogę polecić SSDT, aby zrozumiał, że jest to zmiana nazwy kolumny?

Wiem, jak to zrobić ręcznie, ale wolałbym uniknąć tego problemu w SSDT, lub być w stanie go rozwiązać, jeśli pojawi się ponownie w przyszłości.

+0

Jeśli porównać projekt z bazą danych, czy inne właściwości są wyświetlane jako różne? Czasem istnieje subtelna różnica, której nie widać, ale wystarcza, by wywołać spadek/odtworzyć. Sprawdź także plik "refactorlog", aby sprawdzić, czy istnieje wpis, który umożliwia zmianę nazwy kolumny. Jeśli nie, może być konieczne utworzenie. Najłatwiej jest zmienić nazwę na coś, a następnie nadać jej nazwę - usunąć dodatkową zmianę nazwy i powinieneś być dobry. –

Odpowiedz

9

Myślę, że jest pewne nieporozumienie. Dokonano zmiany nazwy kolumny na prawdziwej bazie danych, a teraz chcesz porównać schemat, aby propagować zmianę nazwy kolumny z bazy danych na projekt SSDT. To nie działa w ten sposób, ponieważ SSDT nie może wykryć, że nazwa kolumny została zmieniona.

Właściwy scenariusz to najpierw zmienić nazwę kolumny w SSDT (prawy przycisk myszy na kolumnie -> Refaktor -> Zmień nazwę. Zostanie utworzony plik refaktora - nie można go usunąć.). Następnie wykonaj porównanie schematu między projektem a docelową bazą danych. Zmiana zostanie przeniesiona na serwer jako zmiana nazwy kolumny.

3

Czy użyłeś refaktora -> zmień nazwę opcji menu? W ten sposób można go włączyć, jeśli tak się stało i nie działało, to zgłosiłbym błąd w łączu.

Aby ręcznie wprowadzić nazwę ręcznie, użyj menu refaktoryzacji lub sprawdź refactorlog.xml i łatwo jest dodać wpis ręcznie.

Daj nam znać, co się stało/zdecydujesz się zrobić!

+0

To chyba musi być oczywiste, więc obawiam się, że jestem kompletnie zagubiony. Używam SSDT w VS2012 i 13. Jestem w oknie porównania. Kliknij prawym przyciskiem myszy tylko opcje "Uwzględnij/wyklucz".Na górze okna porównania znajduje się pasek przycisków z przyciskami Porównaj, Zatrzymaj, Aktualizuj itp. I nie znajduję żadnej opcji związanej z SSTD w głównym menu VS. Jeśli kliknę prawym przyciskiem myszy na pliku skryptu definicji tabeli widzę tylko Refactor -> [Rozwiń symbole wieloznaczne, W pełni kwalifikuj nazwy]. Jestem trochę ślepy lub trochę ukryty;) Proszę, dołącz wyjaśnienie do samej odpowiedzi. Bardzo dziękuję za szybką odpowiedź – JotaBe

+0

Podniosłem tę odpowiedź, ponieważ jest poprawna, ale, jak pokazuje mój komentarz, było trochę informacji, które sprawiły, że byłaby zrozumiała, więc wybrałem drugą jako rozwiązanie. Mimo wszystko dziekuję. – JotaBe

+0

gdzie znalazłeś zmianę nazwy reaktora – coder771

Powiązane problemy