Dziś poznamy dwa tricki SQL-owe w jednym. Obydwa są raczej banalne i raczej mało przydatne przy codziennej pracy, ale od czasu do czasu mogą sie jednak przydać - zwłaszcza w połączeniu.
Od razu też uprzedzam: dla starych wyjadaczy ten wpis będzie nudny jak flaki z olejem. Nie ma w nim niczego odkrywczego. Ale ponieważ mi się ta technika niedawno przydała, zakładam, że równie dobrze może się przydać komuś innemu...
Otóż wyobraźmy sobie następującą sytuację: mamy multum baz danych na serwerze SQL (MS SQL Server) i nagle okazuje się, że musimy masowo podmienić jakiś tekst w definicjach wszystkich obiektów (procedury, funkcje, triggery itd) na jakiś inny.
A czemu tak? Bo tak, przyczyn może być wiele. Na przykład zmieniła się nazwa sieciowa jakiegoś serwera, który jest zakodowany na twardo w niektórych procedurach, albo zmieniła się nazwa jakiejś bazy danych, do której odwołują się obiekty z innych baz. Albo cokolwiek innego. Tak czy siak, nadchodzi moment, że musimy wyszukać wszystkie obiekty zawierające (w swojej definicji) dany tekst i zamienić ten tekst na inny.
Jak się do tego zabrać?
W sukurs przychodzą nam dwa zupełnie niezależne od siebie narzędzia:
1. ApexSQL
2. Okno / zakładka "Object Explorer Details" w SQL Server Management Studio.
Kolejność działań jest następująca (zakładam, że ApexSQL jest już zainstalowany):
1. Włączamy okienko "Object Explorer Details" (klawisz F7)
2. Wyszukujemy wszystkie obiekty z tekstem, który ma być podmieniony, za pomocą ApexSQL.
3. Sortujemy je wg typu.
4. Dla każdego typu obiektu / bazy danych klikamy rodzica tego obiektu w drzewku Eksploratora (na przykład jeżeli obiekt jest procedurą, klikamy w "Stored Procedures" itd.).
5. W okienku Object Explorer Details, przytrymując klawisz Ctrl, zaznaczamy wzsystkie obiekty odnalezione przez ApexSQL dla tej bazy.
6. Prawomysz -> Script object as -> DROP and CREATE To -> New Query Editor Window
7. Ctrl-H, zamieniamy wszystkie wystąpienia tekstu na nowe
8. F5
9. Zamykamy okienko (albo zapisujemy je dla potomności, jeżeli zachodzi taka potrzeba)
10. Powtarzamy kroki 4-9 dla wszystkich pozostałych baz danych / typów obiektów.
11. Gotowe!
Jest to w dalszym ciągu dość żmudne przedsięwzięcie, ale - zapewniam - o wiele szybsze, niż praca na pojedynczych obiektach.
Na czym polega trick?
Po pierwsze na tym, że ApexSQL jest bardzo szybki i skuteczny w przeszukiwaniu definicji obiektów, a po drugie, okienko Object Explorer Details - w odróżnieniu od drzewka Eksploratora - umożliwia zaznaczenie wielu obiektów na raz, dzięki czemu możemy przeprowadzić operację masową, a nie na pojedynczych obiektach.
Nawiasem mówiąc jest to jedyne sensowne zastosowanie tego okienka, jakie znam... Zazwyczaj pierwsza rzecz, którą robię zaraz po uruchomieniu SSMS, to wyłączenie tego okna.
Wspominałem już, że będzie nudno?
No to już - na szczęście - koniec.
masowe zmiany na obiektach bazodanowych.. Prawa Murphiego aż piszczą z radości w kącikach.
Oczywiście pomijam kwestię alterowania obiektów zależnych.. Ale przypomina to historię [fakt „autentyczny”] z Ruchem.
Goście mieli startować na przetarg do Ruchu, ale nie mieli czasu na przygotowanie materiałów. Ponieważ jakiś czas wcześniej robili bardzo podobny projekt dla banku, wpadli na pomysł, że zmienią [masowo] słowo bank na Ruch. tak też zrobili. Po jakimś czasie dostają zapytanie od organizatora: co to są ruchomaty.