Где SQL Server хранит код хранимой процедуры? - PullRequest
20 голосов
/ 16 марта 2010

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

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

Ответы [ 7 ]

34 голосов
/ 16 марта 2010

Используйте 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 '%'+@Search+'%'
    ORDER BY 2,1

используйте это для просмотра текста данной процедуры, представления, функции:

select * from sys.sql_modules where object_id=object_id('YourProcedure')
3 голосов
/ 16 сентября 2010

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

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

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

3 голосов
/ 16 марта 2010

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

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%'
1 голос
/ 16 марта 2010

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

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

INFORMATION_SCHEMA

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

1 голос
/ 16 марта 2010

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

ВЫБРАТЬ * ОТ сискомментов ГДЕ ТЕКСТ НРАВИТСЯ '% searchstring%'

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

0 голосов
/ 16 марта 2010

Если вы используете SQL Server Management Studion, вы можете щелкнуть правой кнопкой мыши нужную базу данных, а затем нажать «Задачи -> Создать сценарии».

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

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

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

EDIT:

Вы также можете увидеть один отдельный код SP, пройдя по этому пути «YourDB -> Programmbility -> Stored Programs», затем щелкните правой кнопкой мыши на SP, который вы хотите увидеть, и нажмите «Modify», и откроется окно запроса с кодом.

0 голосов
/ 16 марта 2010

Если вы просто пытаетесь просмотреть код хранимых процедур, вы переходите в папку progammabiltity в вашей БД, и все они должны храниться там в виде хранимых процедур.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...