Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / extended stored procedure / 9 сообщений из 9, страница 1 из 1
07.03.2002, 14:31
    #32024735
Michael
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
extended stored procedure
А не подскажут ли всезнающие, что это за ерунда. Вызываю в user-defined function extended procedure следующим образом:

CREATE FUNCTION [dbo].[fn_NextValue] (@Name nvarchar(30))
RETURNS int
AS
BEGIN
Declare @result int

exec master..xp_nextval @Name, @result output

return (@result)

END

на выходе NULL. если вызываю этот код непосредственно или делаю аналогичную sp_ , то все нормально. где собака порылась?
...
Рейтинг: 0 / 0
07.03.2002, 15:10
    #32024740
GreenSunrise
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
extended stored procedure
Возможно, в вашей extended sp неправильно описан выходной параметр. Если использовать стандартные xp, то все работает замечательно.

Аналогичный пример со стандартной процедуркой:

create function fn_GetNetName()
returns sysname
as
begin
declare @res sysname
exec master..xp_getnetname @res out
return @res
end
go

select dbo.fn_GetNetName()

Может, покажете кусок кода в процедуре, который формирует выходной параметр?
...
Рейтинг: 0 / 0
07.03.2002, 15:19
    #32024742
Ьшсрфуд
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
extended stored procedure
вот (исползуется SQL-DMO):
//формируется запрос
char szResult[1024]="Select Value from master..syssequences where Name='";
strncat((char *)szResult,(char *)pbData,cbActualLen);
strcat((char *)szResult,"'");

//Выполняется
QueryResultsPtr pResult=spSQLServer->ExecuteWithResults(szResult);

//получаем результат - проверял, нормально все
int lResult=pResult->GetColumnLong(1,1);


spSQLServer->DisConnect();

spSQLServer.Release();

//возвращается значение типа int (long тоже пробовал)
srv_paramsetoutput(srvproc,2,(BYTE *)&lResult,sizeof(lResult),FALSE);


вот. когда делал xp_ с одним вх/вых параметром типа varchar все было нормально
...
Рейтинг: 0 / 0
07.03.2002, 16:05
    #32024747
GreenSunrise
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
extended stored procedure
На всякий случай проверь выходное значение srv_paramsetoutput. Вдруг FAIL. А так описание выглядит вполне правдоподобно
...
Рейтинг: 0 / 0
07.03.2002, 16:15
    #32024748
GreenSunrise
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
extended stored procedure
А попробуй еще сделать set nocount on перед вызовом ExecuteWithResults.
...
Рейтинг: 0 / 0
11.03.2002, 09:33
    #32024828
Michael
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
extended stored procedure
Все попробовал - не помогает
(( фигня какая-то. может, есть еще какие мысли?
...
Рейтинг: 0 / 0
11.03.2002, 11:01
    #32024841
GreenSunrise
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
extended stored procedure
Мда, жаль. Ну ладно, кинь тогда структуру таблицы syssequences (по названию смахивает на системную, но у меня такой в мастере нет) и данные для нее, а то у меня тестовый пример нормально работает.

А если вместо lResult=pResult->GetColumnLong(1,1) присваивать просто константу, то тоже работает неправильно? Хочется сузить область поисков - связана ошибка именно с описанием или присвоением параметров или же копать надо в сторону получения данных.
...
Рейтинг: 0 / 0
11.03.2002, 13:58
    #32024861
Michael
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
extended stored procedure
syssequences - это чтоб ввести в заблуждение
- обычная таблица:
CREATE TABLE [dbo].[syssequences] (
Name nvarchar (30) Constraint PK_syssequences Primary key NOT NULL ,
Start int NOT NULL ,
Seed int NOT NULL ,
Finish int NULL,
Value int NULL
) ON [PRIMARY]

я повторюсь. проблема не в том, что xp_ не возвращает значение, а в том, что не возвращает значение UDF, использующая данную xp_:

declare @res int
exec xp_newval 'Test',@res output
select @res
- работает нормально, выдает значения

а если сделать ф-цию (fn_newval), всатвить в нее этот код, кроме последнего select'а, и выдать return (@ret)
то
select fn_newval(....)
выдает NULL.
А не может это быть из-за того, что в xp_ делается update таблицы? Было бы как минимум странно
...
Рейтинг: 0 / 0
11.03.2002, 14:31
    #32024863
GreenSunrise
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
extended stored procedure
Насчет udf и xp_ помню. У меня как раз такая связка в тестовом примере работала нормально.

Ага, там еще и update'ы происходят. И небось еще много чего интересного
Сразу хочется узнать кучу деталей. Кинь мне, плз, на мыло все скрипты для базы и компилирующийся код xp целиком, чтобы воспроизвести эту ситуацию - GreenSunrise@mail.ru

А то надоело с тестами возиться - в них все нормально.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / extended stored procedure / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]