Подтвердить что ты не робот

Где SQL Server хранит код хранимой процедуры?

Мне нужны строки хранимых процедур, чтобы иметь возможность отслеживать, есть ли у меня ссылка на какую-либо функцию, процедуру или таблицу или иногда пытаться найти что-то внутри sp-кода.

Где SQL Server хранит код процедуры?

4b9b3361

Ответ 1

Используйте 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')

Ответ 2

Он хранит его в таблицах системной схемы:

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%'

Ответ 3

Вы можете использовать

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

Эти версии никогда не усекаются.

Ответ 4

Если вы используете SQL Server Management Studion, вы можете щелкнуть правой кнопкой мыши по нужной вам базе данных, а затем нажать "Задачи → Сгенерировать скрипты".

Здесь вы можете сгенерировать script со всеми SP в одном файле, отдельными файлами или непосредственно в окне запроса, а также искать/изменять то, что вы хотите.

Надеюсь, что это поможет.

(это для SQL Server 2008, но я думаю, что 2005 тоже имеет эту функциональность)

EDIT:

Вы также можете увидеть один единственный код SP, следуя этому пути "YourDB → Programmability → Хранимые процедуры", затем щелкните правой кнопкой мыши на SP, который хотите просмотреть, и нажмите "Изменить", и откроется окно запроса с кодом.

Ответ 5

Если вы пытаетесь найти ссылки на другие объекты, вы можете запустить такой запрос:

SELECT * ОТ СИСТЕМЫ WHERE TEXT LIKE '% searchstring%'

Это приведет к возврату любых объектов в базе данных, которые ссылаются на строку поиска. Затем вы можете посмотреть эти объекты, чтобы увидеть, какие хранимые процедуры (и представления и функции) делают это.

Ответ 6

Просмотр зависимостей

В SQL Server Management Studio щелкните правой кнопкой мыши на таблице и выберите "View Dependencies". Вы увидите каждый объект, который ссылается на таблицу

INFORMATION_SCHEMA

Фактический код хранимой процедуры proc, view, constraint и т.д. сохраняется в SysComments. Вы должны запросить это, используя представления, представленные в схеме Information_Schema. Вот все компоненты Information_Schema.

Ответ 7

Если вы просто пытаетесь просмотреть код хранимых процедур, вы попадаете в папку прогаммабельности в своей базе данных, и все они должны храниться там под хранимыми процедурами.