Mam połączony serwer, który się zmieni. Niektóre procedury wywołać serwer połączony takiego: [10.10.100.50].dbo.SPROCEDURE_EXAMPLE
. Mamy również wyzwalacze wykonujące tego rodzaju pracę. Musimy znaleźć wszystkie miejsca, w których [10.10.100.50]
można to zmienić.
W SQL Server Management Studio Express nie znalazłem funkcji typu „znajdź w całej bazie danych” w programie Visual Studio. Czy specjalny sys-select może pomóc mi znaleźć to, czego potrzebuję?
sql-server
stored-procedures
triggers
linked-server
Victor Rodrigues
źródło
źródło
type = 'C'
)?Możesz to znaleźć jak
Wyświetli listę różnych nazw procedur składowanych, które zawierają tekst, taki jak „Użytkownik” wewnątrz procedury składowanej. Więcej informacji
źródło
syscomments
tabela przechowuje wartości w fragmentach po 8000 znaków, więc jeśli masz pecha, aby tekst, którego szukasz, był podzielony na jedną z tych granic, nie znajdziesz go za pomocą tej metody.[Spóźniona odpowiedź, ale miejmy nadzieję, użyteczna]
Używanie tabel systemowych nie zawsze daje w 100% poprawne wyniki, ponieważ może istnieć możliwość, że niektóre procedury składowane i / lub widoki są zaszyfrowane, w takim przypadku będziesz musiał użyć połączenia DAC, aby uzyskać potrzebne dane.
Polecam skorzystanie z narzędzia innej firmy, takiego jak ApexSQL Search, które z łatwością radzi sobie z zaszyfrowanymi obiektami.
Tabela systemowa Syscomments poda wartość zerową dla kolumny tekstowej w przypadku zaszyfrowania obiektu.
źródło
źródło
To zadziała dla Ciebie:
źródło
type = 'C'
)?Istnieją znacznie lepsze rozwiązania niż modyfikowanie tekstu procedur składowanych, funkcji i widoków za każdym razem, gdy zmienia się połączony serwer. Oto kilka opcji:
Zaktualizuj połączony serwer. Zamiast korzystać z połączonego serwera o nazwie z jego adresem IP, należy utworzyć nowy serwer połączony z nazwą zasobu takiego jak
Finance
lubDataLinkProd
czy coś takiego. Następnie, gdy musisz zmienić osiągnięty serwer, zaktualizuj połączony serwer, aby wskazywał nowy serwer (lub upuść go i utwórz ponownie).Chociaż niestety nie możesz tworzyć synonimów dla połączonych serwerów lub schematów, MOŻESZ tworzyć synonimy dla obiektów, które znajdują się na połączonych serwerach. Na przykład Twoja procedura
[10.10.100.50].dbo.SPROCEDURE_EXAMPLE
może zostać utworzona przez alias. Może utworzyć schematdatalinkprod
, a następnieCREATE SYNONYM datalinkprod.dbo_SPROCEDURE_EXAMPLE FOR [10.10.100.50].dbo.SPROCEDURE_EXAMPLE;
. Następnie napisz procedurę składowaną, która akceptuje nazwę serwera połączonego, który wysyła zapytania do wszystkich potencjalnych obiektów ze zdalnej bazy danych i (ponownie) tworzy dla nich synonimy. Wszystkie Twoje SP i funkcje są przepisywane tylko raz, aby używać nazw synonimów zaczynających się oddatalinkprod
i zawsze później, aby zmienić jeden serwer połączony na inny, który po prostu robisz,EXEC dbo.SwitchLinkedServer '[10.10.100.51]';
aw ułamku sekundy używasz innego serwera połączonego.Może być jeszcze więcej opcji. Zdecydowanie zalecam używanie lepszych technik przetwarzania wstępnego, konfiguracji lub pośredniego zamiast zmiany skryptów napisanych przez ludzi. Automatyczne aktualizowanie skryptów utworzonych maszynowo jest w porządku, to jest przetwarzanie wstępne. Robienie rzeczy ręcznie jest okropne.
źródło
źródło
Ten, który wypróbowałem w SQL2008, który może przeszukiwać wszystkie bazy danych za jednym razem.
źródło
Używam tego do pracy. zostaw jednak [] w polu @TEXT, wydaje się, że chce zwrócić wszystko ...
źródło
Używałem ich w przeszłości:
W tym konkretnym przypadku, gdy trzeba zamienić określony ciąg w procedurach składowanych, prawdopodobnie bardziej odpowiednie jest pierwsze łącze.
Nieco niezwiązany z tematem dodatek Szybkie wyszukiwanie jest również przydatny do wyszukiwania nazw obiektów za pomocą programu SQL Server Management Studio. Dostępna jest zmodyfikowana wersja z pewnymi ulepszeniami, a kolejna nowsza wersja jest również dostępna w Codeplex z kilkoma innymi przydatnymi dodatkami.
źródło
Każde wyszukiwanie za pomocą instrukcji select daje tylko nazwę obiektu, w której zawiera słowo kluczowe wyszukiwania. Najłatwiejszym i najskuteczniejszym sposobem jest pobranie skryptu procedury / funkcji, a następnie wyszukanie w wygenerowanym pliku tekstowym, ja też stosuję tę technikę :) Więc jesteś dokładny.
źródło
źródło
Właśnie napisałem to dla ogólnego, pełnego zewnętrznego krzyża ref
źródło
Możesz przeszukiwać definicje wszystkich obiektów bazy danych za pomocą następującego SQL:
źródło