|
Execute SP с параметром OUTPUT
|
|||
---|---|---|---|
#18+
Добрый день всем! Старая история с новыми проблемами. Перехожу с PB9 (Ent) на PB11.5 (Prof), MS SQL 2005, ODBC. Не желает запускать процедуры, объявленные с параметром OUTPUT. Например: DECLARE ReportForma251 PROCEDURE FOR sp_ReportForma251 @success = 0 OUTPUT, @userID = :gstr_user.i_userid, @rptDay = :ldt_rptday; Команда EXECUTE ReportForma251; завершается с ошибкой: Cannot use the OUTPUT option when passing a constant to a stored procedure Причем, ошибка НЕ ВОЗНИКАНТ на соединении с правами sysadmin. Может, кто-нибудь сталкивался с такой бедой? Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2010, 14:10 |
|
Execute SP с параметром OUTPUT
|
|||
---|---|---|---|
#18+
А что в профайлере видно когда запускается с правами sysadmin и без (на каком SQL statement'е ошибка)? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2010, 14:39 |
|
Execute SP с параметром OUTPUT
|
|||
---|---|---|---|
#18+
Я пошагово выполняла, ошибка на команде EXECUTE ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2010, 14:53 |
|
Execute SP с параметром OUTPUT
|
|||
---|---|---|---|
#18+
ну так не нужно передавать константу как OUTPUT :) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2010, 15:00 |
|
Execute SP с параметром OUTPUT
|
|||
---|---|---|---|
#18+
Замена константы переменной не помогает ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2010, 15:03 |
|
Execute SP с параметром OUTPUT
|
|||
---|---|---|---|
#18+
nfiЯ пошагово выполняла, ошибка на команде EXECUTE Посмотрите в profiler'е SQL Server'а во что транслируется PB команда PREPARE и EXECUTE. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2010, 15:05 |
|
Execute SP с параметром OUTPUT
|
|||
---|---|---|---|
#18+
Profiler SQL с sysadmin declare @p1 int set @p1=0 exec sp_ReportForma251 @p1 output,2,''2009-12-01 00:00:00:000'' select @p1 Profiler SQL без sysadmin execute sp_ReportForma251 @success =0 OUTPUT , @userID =2 , @rptDay ='2010-02-04 00:00:00.000' ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2010, 16:19 |
|
Execute SP с параметром OUTPUT
|
|||
---|---|---|---|
#18+
В файле dbtrace.log: a). Есть права sysadmin (a620008): USERID=dbo (a620008): SERVER=SNB-RETAIL-NEW (a620008): DBPARM=ConnectOption='SQL_DRIVER_CONNECT,SQL_DRIVER_NOPROMT',ConnectString='Server=SNB-RETAIL-NEW;Database=retail_test;Driver=SQL Server;CommLinks=TCPIP(IP=192.168.0.200:1433);UID=kassa1;PWD=961329',StripParmNames='YES',PBNewSPInvocation='YES'(DBI_CONNECT) (0.001 MS / 0.029 MS) (a620008): (DBI_CURSOR_CONNECTION) (0.001 MS / 0.030 MS) (a620008): (DBI_SPECIAL_DECIMAL) (0.000 MS / 0.030 MS) (a620008): (DBI_SPECIAL_DOUBLE) (0.000 MS / 0.030 MS) (a620008): (DBI_DATE_STRING) (0.015 MS / 0.045 MS) (a620008): EXECUTE: (a620008): execute sp_ReportForma251 @success =0 OUTPUT , @userID =2 , @rptDay ='2009-12-01 00:00:00.000' (DBI_RUNTIME_EXECUTE) (10266.645 MS / 10266.690 MS) б). Нет прав sysadmin (a620c10): USERID=kassa1 (a620c10): SERVER=SNB-RETAIL-NEW (a620c10): DBPARM=ConnectOption='SQL_DRIVER_CONNECT,SQL_DRIVER_NOPROMT',ConnectString='Server=SNB-RETAIL-NEW;Database=retail_test;Driver=SQL Server;CommLinks=TCPIP(IP=192.168.0.200:1433);UID=kassa1;PWD=064520',StripParmNames='YES',PBNewSPInvocation='YES'(DBI_CONNECT) (0.000 MS / 0.024 MS) (a620c10): (DBI_CURSOR_CONNECTION) (0.000 MS / 0.024 MS) (a620c10): (DBI_SPECIAL_DECIMAL) (0.000 MS / 0.024 MS) (a620c10): (DBI_SPECIAL_DOUBLE) (0.000 MS / 0.024 MS) (a620c10): (DBI_DATE_STRING) (0.012 MS / 0.036 MS) (a620c10): EXECUTE: (a620c10): execute sp_ReportForma251 @success =0 OUTPUT , @userID =2 , @rptDay ='2009-12-01 00:00:00.000' (DBI_RUNTIME_EXECUTE) (5.153 MS / 5.189 MS) (a620c10): *** ERROR 179 ***(rc -1) : SQLSTATE = 37000 [Microsoft][ODBC SQL Server Driver][SQL Server]Cannot use the OUTPUT option when passing a constant to a stored procedure. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2010, 16:52 |
|
Execute SP с параметром OUTPUT
|
|||
---|---|---|---|
#18+
А права у пользователе есть на запуск ReportForma251? Попробуйте вызвать CONNECT сразу перед вызовом процедуры. Из приведенного фрагмента не ясно, почему PB решает вызвать процедуру вторым способом - значит он что-то считывает с сервера до этого. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2010, 17:41 |
|
Execute SP с параметром OUTPUT
|
|||
---|---|---|---|
#18+
Права есть. Если убрать OUTPUT, процедура отрабатывает. То, что у пользвателя есть роль sysadmin, запоминается при выполнении CONNECT. Непонятно, как заставить PB определять USERID=dbo независимо от наличия роли sysadmin. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2010, 11:19 |
|
Execute SP с параметром OUTPUT
|
|||
---|---|---|---|
#18+
nfiПрава есть. Если убрать OUTPUT, процедура отрабатывает. То, что у пользвателя есть роль sysadmin, запоминается при выполнении CONNECT. Непонятно, как заставить PB определять USERID=dbo независимо от наличия роли sysadmin. Указывайте в PB схему, в которой находится процедура явно: Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2010, 12:00 |
|
Execute SP с параметром OUTPUT
|
|||
---|---|---|---|
#18+
nfiТо, что у пользвателя есть роль sysadmin, запоминается при выполнении CONNECT. И это кстати ложное утверждение. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2010, 13:21 |
|
Execute SP с параметром OUTPUT
|
|||
---|---|---|---|
#18+
Марк, спасибо большое, заработала процедура. Как вы нашли решение? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2010, 14:46 |
|
|
start [/forum/topic.php?fid=15&fpage=28&tid=1336040]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
47ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 166ms |
0 / 0 |