Мне нужны строки хранимых процедур, чтобы иметь возможность отслеживать, есть ли у меня ссылка на какую-либо функцию, процедуру или таблицу или иногда пытаться найти что-то внутри sp-кода.
Где SQL Server хранит код процедуры?
Мне нужны строки хранимых процедур, чтобы иметь возможность отслеживать, есть ли у меня ссылка на какую-либо функцию, процедуру или таблицу или иногда пытаться найти что-то внутри sp-кода.
Где SQL Server хранит код процедуры?
Используйте sys.sql_modules
, потому что definition
есть nvarchar(max)
, потому что он не будет обрезать длинный код.
В INFORMATION_SCHEMA.ROUTINES
столбец ROUTINE_DEFINITION
равен nvarchar(4000)
, поэтому, если вы попытаетесь просмотреть текст длинной процедуры, и вы увидите, что она усечена.
Используйте это для поиска текста в любой процедуре, представлении, функции:
SELECT DISTINCT
o.name AS Object_Name,o.type_desc
FROM sys.sql_modules m
INNER JOIN sys.objects o ON m.object_id=o.object_id
WHERE m.definition Like '%'[email protected]+'%'
ORDER BY 2,1
используйте это для просмотра текста данной процедуры, просмотра, функции:
select * from sys.sql_modules where object_id=object_id('YourProcedure')
Он хранит его в таблицах системной схемы:
SELECT * FROM INFORMATION_SCHEMA.ROUTINES
См. MSDN о представлении INFORMATION_SCHEMA.ROUTINES
:
ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.en/s10de_6tsql/html/c75561b2-c9a1-48a1-9afa-a5896b6454cf.htm
Для поиска контента по этому вопросу вы можете выполнить следующее:
SELECT * FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_DEFINITION LIKE '%search_string%'
Вы можете использовать
select object_definition(object_id(routine_name)) from information_schema.routines
или
select object_definition(object_id) from sys.objects where name = 'foo'
или даже
select object_definition(object_id('foo')); -- 'foo' is the table name
Эти версии никогда не усекаются.
Если вы используете SQL Server Management Studion, вы можете щелкнуть правой кнопкой мыши по нужной вам базе данных, а затем нажать "Задачи → Сгенерировать скрипты".
Здесь вы можете сгенерировать script со всеми SP в одном файле, отдельными файлами или непосредственно в окне запроса, а также искать/изменять то, что вы хотите.
Надеюсь, что это поможет.
(это для SQL Server 2008, но я думаю, что 2005 тоже имеет эту функциональность)
EDIT:
Вы также можете увидеть один единственный код SP, следуя этому пути "YourDB → Programmability → Хранимые процедуры", затем щелкните правой кнопкой мыши на SP, который хотите просмотреть, и нажмите "Изменить", и откроется окно запроса с кодом.
Если вы пытаетесь найти ссылки на другие объекты, вы можете запустить такой запрос:
SELECT * ОТ СИСТЕМЫ WHERE TEXT LIKE '% searchstring%'
Это приведет к возврату любых объектов в базе данных, которые ссылаются на строку поиска. Затем вы можете посмотреть эти объекты, чтобы увидеть, какие хранимые процедуры (и представления и функции) делают это.
Просмотр зависимостей
В SQL Server Management Studio щелкните правой кнопкой мыши на таблице и выберите "View Dependencies". Вы увидите каждый объект, который ссылается на таблицу
INFORMATION_SCHEMA
Фактический код хранимой процедуры proc, view, constraint и т.д. сохраняется в SysComments
. Вы должны запросить это, используя представления, представленные в схеме Information_Schema
. Вот все компоненты Information_Schema.
Если вы просто пытаетесь просмотреть код хранимых процедур, вы попадаете в папку прогаммабельности в своей базе данных, и все они должны храниться там под хранимыми процедурами.