Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS SQL Server > как отличить пользователькую поцедуру от системной


Автор: Evropeec 10.7.2008, 17:19
как отличить пользователькую поцедуру от системной?

пытался делать через SMO в цыкле

            For Each myProc In mydbP.StoredProcedures
                    If Not myProc.IsSystemObject Then
......

, но эта проверка "myProc.IsSystemObject" работает очень долго

делаю так

select * 
from sys.objects o 
where o.[type]='P' 
order by name

, но запрос вытягивает так же некоторое кол-во системных проседур, а надо только пользовательские

 smile 

Автор: TaNK 11.7.2008, 08:05
Цитата(Evropeec @ 10.7.2008,  17:19)
как отличить пользователькую поцедуру от системной?

пытался делать через SMO в цыкле

            For Each myProc In mydbP.StoredProcedures
                    If Not myProc.IsSystemObject Then
......

, но эта проверка "myProc.IsSystemObject" работает очень долго

делаю так

select * 
from sys.objects o 
where o.[type]='P' 
order by name

, но запрос вытягивает так же некоторое кол-во системных проседур, а надо только пользовательские

 smile

а так? вытянет все системные процедуры
Код

select * 
from sysobjects o 
where o.[name] like 'dt_%'  and o.[type] = 'p' 
order by name

Автор: Evropeec 11.7.2008, 10:38
Цитата


а так? вытянет все системные процедуры

Код

 select * 
from sysobjects o 
where o.[name] like 'dt_%'  and o.[type] = 'p' 
order by name





нет так не пойдёт, у меня системные процедуры первые буквы имеют "sp_*" и "xp_*", но это тоже не выход. У меня так, у тебя по другому, у третьего еще как-нибудь. Да и от версии тоже менятся будут. Пока остановились на пространстве имён, если ничего другого не найдём. 

Автор: TaNK 11.7.2008, 10:58
а какой сервой то?

Добавлено через 5 минут и 42 секунды
на SQL2000 можно так
Код

select * 
from sysobjects o 
where o.category = 2 and o.[type] = 'p' 
order by name
  
или так 
Код

select * 
from sysobjects o 
where o.status < 0 and o.[type] = 'p' 
order by name

Автор: Evropeec 11.7.2008, 11:45
Сервер SQL2005. 
в таблице sys.objects есть поле is_ms_shipped по идее там значения 0=юзер, 1=система. Подходит для триггеров и view, а вот для процедур нет, у системных тоже стоит 0. 

Автор: TaNK 11.7.2008, 11:55
Цитата(Evropeec @ 11.7.2008,  11:45)
Сервер SQL2005. 
в таблице sys.objects есть поле is_ms_shipped по идее там значения 0=юзер, 1=система. Подходит для триггеров и view, а вот для процедур нет, у системных тоже стоит 0.

а поля category или status есть? 

Автор: Evropeec 11.7.2008, 12:09
Цитата

а поля category или status есть?  


Нет, ничего такого нет.
Но по идее то должно быть где-нибудь, ведь сервер обсолютно правильно выполняет 
Код

         If Not myProc.IsSystemObject Then
 , т.е. у него где-то хранится, что эта процедура системная или не системная.

Автор: Magnifico 11.7.2008, 16:11
Код

select * from sys.all_objects o
where  o.[type] = 'p'  and is_ms_shipped =0

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)