Прекращает работу хранимая процедура, непойму почему (

Кифирчик
Дата: 18.01.2009 00:49:39
делаю хранимую процедуру... которая, даёт пользователю базы права на нужные схемы...
CREATE PROCEDURE admin_ch.proc_user_grant_to_task_access
    -- логин пользователя которому даём права
    @user_login VARCHAR(30),
    -- на какие задачи эти права даются
    @as_admin    int,
    @as_men_oper int,
    @as_org_oper int
AS
BEGIN
  PRINT 'user_login:'+@user_login ;
  PRINT 'as_admin   :'+CAST(@as_admin AS CHAR(1))  ;
  PRINT 'as_men_oper:'+CAST(@as_men_oper AS CHAR(1));
  PRINT 'as_org_oper:'+CAST(@as_org_oper AS CHAR(1));

  PRINT '=1';
  EXEC sp_droprolemember 'admin_tbo', @user_login;
  PRINT '=2';
  EXEC sp_droprolemember 'men_tbo'  , @user_login;
  PRINT '=3';
  EXEC sp_droprolemember 'org_tbo'  , @user_login;  
  PRINT '=4';
  
  -- даём права на на схемы
  IF ( @as_admin    = 1 ) EXEC sp_addrolemember 'admin_tbo', @user_login ;
  IF ( @as_men_oper = 1 ) EXEC sp_addrolemember 'men_tbo'  , @user_login;
  IF ( @as_org_oper = 1 ) EXEC sp_addrolemember 'org_tbo'  , @user_login;

END
результат работы:

EXEC admin_ch.proc_user_grant_to_task_access 'user33',1,1,0
===================================
user_login:user33
as_admin   :1
as_men_oper:1
as_org_oper:0
=1

Запрос выполнен успешно, затронуто записей: -1 (219 мс)
видно, что после вызоыва 1-й системной хранимки sp_droprolemember работа прекращается...
отдельно в редакторе SQL процедуры нормально выполняются... такой пользователь точно есть в базе...

почему не хочет работать такая процедура? что я делаю не так?
СУБД MSSQL 2005 Express
Кифирчик
Дата: 18.01.2009 01:03:36
замена
EXEC sp_droprolemember 'admin_tbo', @user_login;
на
SET @query = 'EXEC sp_droprolemember ''admin_tbo'', '''+@user_login+''';';
EXEC(@query);
не помогает... также после EXEC(@query); вылетает (
Cat2
Дата: 18.01.2009 18:42:28
Вроде бы это потому, что sp_droprolemember нельзя запустить из user-defined транзакции, а в хранимых процедурах всегда неявно подставляется BEGIN TRAN в начале и COMMIT TRAN в конце.
Ray D
Дата: 18.01.2009 18:56:11
Cat2
Вроде бы это потому, что sp_droprolemember нельзя запустить из user-defined транзакции, а в хранимых процедурах всегда неявно подставляется BEGIN TRAN в начале и COMMIT TRAN в конце.

Это с чего бы вдруг? Неправда...

2 Кифирчик:
А откуда и как эту процедуру запускаете? У меня работает...
Кифирчик
Дата: 18.01.2009 20:33:19
запускаю в EMS Manager... редактор SQL, аля Query Analizer... логинюсь под sa...
на SELECT CURRENT_USER откликается - "dbo"...
самое странное, что сначала, когда я её написал - работало... точно помню тестировал...
потом вызывал её из другой процедуры... та тоже сработала, но только 1 раз... потом глюки...
методом исключение понял, что из за вызова той процедуры, что я привёл в посте...
Cat2
Дата: 18.01.2009 21:32:35
Кифирчик,
Из редактора вызываете в виде набора операторов или через вызов процедуры?
Кифирчик
Дата: 18.01.2009 22:09:48
мля... полтергейст...
в Management Studio всё работает
видать что-то с EMS случилось... он и на всякие Ctrl+Z, Ctrl+C перестал реагировать... хотя странно
в нём даже EXEC sp_droprolemember 'org_tbo' , 'user33'; не работает... вернее эффекта от выполнения нет.

Благодарю всех за помощь!
Вопрос закрыт. траблы в EMS Manager