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.