#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
в.