У меня есть связанный сервер, который изменится. Некоторые процедуры называют связанный сервер , как это: [10.10.100.50].dbo.SPROCEDURE_EXAMPLE
. У нас есть триггеры, которые также выполняют эту работу. Нам нужно найти все места, которые используются [10.10.100.50]
для его изменения.
В SQL Server Management Studio Express я не нашел такой функции, как «найти во всей базе данных» в Visual Studio. Может ли специальный sys-select помочь мне найти то, что мне нужно?
sql-server
stored-procedures
triggers
linked-server
Виктор Родригес
источник
источник
type = 'C'
)?Вы можете найти это как
В нем будут перечислены различные имена хранимых процедур, которые содержат текст, такой как «Пользователь» внутри хранимой процедуры. Больше информации
источник
syscomments
таблица хранит значения в виде фрагментов по 8000 символов, поэтому, если вам не повезло, что искомый текст разбит на одну из этих границ, вы не найдете его с помощью этого метода.[Поздний ответ, но, надеюсь, полезно]
Использование системных таблиц не всегда дает 100% правильные результаты, поскольку может существовать вероятность того, что некоторые хранимые процедуры и / или представления будут зашифрованы, и в этом случае вам потребуется использовать соединение DAC для получения необходимых данных.
Я бы порекомендовал использовать сторонний инструмент, такой как ApexSQL Search, который может легко работать с зашифрованными объектами.
Системная таблица Syscomments выдаст нулевое значение для текстового столбца, если объект зашифрован.
источник
источник
Это будет работать для вас:
источник
type = 'C'
)?Существуют гораздо лучшие решения, чем изменение текста хранимых процедур, функций и представлений при каждом изменении связанного сервера. Вот несколько вариантов:
Обновите связанный сервер. Вместо использования связанного сервера с именем , его IP - адрес, создать связанный сервер с именем ресурса , таких как
Finance
илиDataLinkProd
или некоторые такие. Затем, когда вам нужно изменить, какой сервер достигнут, обновите связанный сервер, чтобы он указывал на новый сервер (или удалите его и создайте заново).К сожалению, вы не можете создавать синонимы для связанных серверов или схем, но МОЖЕТЕ делать синонимы для объектов, которые расположены на связанных серверах. Например, ваша процедура
[10.10.100.50].dbo.SPROCEDURE_EXAMPLE
может быть псевдонимом. Возможно создать схемуdatalinkprod
, затемCREATE SYNONYM datalinkprod.dbo_SPROCEDURE_EXAMPLE FOR [10.10.100.50].dbo.SPROCEDURE_EXAMPLE;
. Затем напишите хранимую процедуру, которая принимает имя связанного сервера, который запрашивает все потенциальные объекты из удаленной базы данных и (повторно) создает для них синонимы. Все ваши SP и функции переписываются только один раз, чтобы использовать имена синонимов, начинающиеся сdatalinkprod
и после этого, чтобы переключаться с одного связанного сервера на другой, который вы только что делаете,EXEC dbo.SwitchLinkedServer '[10.10.100.51]';
и через доли секунды вы используете другой связанный сервер.Там может быть даже больше вариантов. Я настоятельно рекомендую использовать превосходные методы предварительной обработки, настройки или косвенного обращения, а не изменять написанные человеком сценарии. Автоматическое обновление машинных скриптов - это хорошо, это предварительная обработка. Делать вещи вручную ужасно.
источник
источник
Этот я пробовал в SQL2008, который может искать от всех БД за один раз.
источник
Я использую это для работы. оставьте [] в поле @TEXT, похоже, хотите вернуть все ...
источник
Я использовал это в прошлом:
В этом конкретном случае, когда вам нужно заменить определенную строку в хранимых процедурах, первая ссылка, вероятно, более актуальна.
Немного не по теме, надстройка Quick Find также полезна для поиска имен объектов в SQL Server Management Studio. Есть модифицированная версия, доступная с некоторыми улучшениями, и другая более новая версия, также доступная в Codeplex, с некоторыми другими полезными надстройками.
источник
Любой поиск с оператором select дает вам только имя объекта, в котором содержится ключевое слово для поиска. Самый простой и эффективный способ - получить скрипт процедуры / функции, а затем выполнить поиск в сгенерированном текстовом файле, я также следую этой методике :) Так что вы точно знаете.
источник
источник
Только что написал это для общего полного внешнего перекрестного ссылки
источник
Вы можете искать в определениях всех объектов базы данных, используя следующий SQL:
источник