Как найти все объекты в базе данных, использующие ОБЪЕДИНЕНИЕ

#sql-server #sql-server-2005 #sql-server-2008 #union #union-all

#sql-server #sql-server-2005 #sql-server-2008 #объединение #объединение-все

Вопрос:

Как я могу найти все представления и SP, содержащие ключевое слово UNION?

(Альтернативный вопрос: в какой системной таблице хранится текст SP и представлений)

Спасибо

Комментарии:

1. Если вам нужен инструмент, вы можете использовать RedGate SQL Search .

Ответ №1:

Вот несколько наивный, но работоспособный пример: (протестировано на SQL Server 2005 и 2008 R2)

 use msdb;

SElECT * FROM sys.all_sql_modules
WHERE  
(definition LIKE '%CREATE VIEW%' OR 
 definition LIKE '%CREATE PROCEDURE%')
AND definition LIKE '%UNION%'
  

Чтобы укрепить его, просто присоединитесь по ссылке object_id и фильтруйте представления и сохраненные процедуры по типу объекта, а не используйте LIKE .

Проще:

 SElECT * FROM sys.all_sql_modules
WHERE definition LIKE '%UNION%'
  

Предостережение: поскольку мы выполняем аналогичное сравнение со сценарием создания каждого объекта, мы также будем использовать слово ОБЪЕДИНЕНИЕ, если / когда оно появляется в комментариях. Это может быть нормально для вас, но если вам нужно, чтобы результаты были более детерминированными и избегали таких случаев, ваше предложение WHERE должно быть более сложным, возможно, с использованием регулярных выражений для уточнения результатов.

Ответ №2:

Лично мне нравится использовать INFORMATION_SCHEMA представления:

Для хранимых процедур:

 SELECT 
    * 
FROM 
    INFORMATION_SCHEMA.ROUTINES 
WHERE 
    ROUTINE_TYPE = 'PROCEDURE' 
    AND 
    --ROUTINE_DEFINITION LIKE '%union%' <-- 4,000 character limitation
    OBJECT_DEFINITION(OBJECT_ID(SPECIFIC_SCHEMA   '.'   SPECIFIC_NAME)) 
        LIKE '%union%'
  

И для представлений:

 SELECT 
    * 
FROM 
    INFORMATION_SCHEMA.VIEWS 
WHERE 
    --VIEW_DEFINITION LIKE '%union%' <-- 4,000 character limitation
    OBJECT_DEFINITION(OBJECT_ID(TABLE_SCHEMA   '.'   TABLE_NAME)) LIKE '%union%'
  

Эти представления ограничены определениями в любой базе данных, которую вы в данный момент USE редактируете.

Кроме того, есть замечательный инструмент от xSQL software, который предоставляет вам мощные возможности поиска для Microsoft SQL Server 2005 и 2008.

ОБНОВЛЕНИЕ: как указал @Bogdan, INFORMATION_SCHEMA определения ограничены первыми 4000 символами. Я обновил свой ответ, включив обходной путь. На этом этапе может быть проще перейти к sys представлениям.

Комментарии:

1. ROUTINE_DEFINITION ограничено только 4000 символов ( NVARCHAR(4000) ) .

2. @BogdanSahlean: Спасибо за информацию — я не понимал, что это так.

Ответ №3:

Эти вещи хранятся sys.sql_modules в.