Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 некорректность в работе ESP ?....  [new]
densof123
Member

Откуда:
Сообщений: 41
Добрый день !
Возникла необходимость написать ESP для вызова ее с сервера скуля 2000sp4 (она будет вызываться из UDF). С помощью механизма ODS была реализована требуемая функция на DELPHI смысл которой в возврате некого результата, полученного из dll с помощью вызова тупого селекта оный возвращает нужный результат. Кусок кода функции :

....
  //подключение ОБРАТНО к базе данных
  // Get a loginrec and register our error and message handlers.
  loginrec := dblogin();
  if loginrec=nil then begin
    bufQuery:='DBLOGIN - is failed';
    srv_paramsetoutput(srvproc, 3, pchar(bufQuery), Length(bufQuery), System.False);
    bufQuery:='';
    Result:=1;
    exit;
  end;
....
    // Since the servername parameter is set to NULL, the connection will be
    // opened to the local DBMS.
    dbproc := dbopen(loginrec, valBuffer);
    if(dbproc=nil)then begin
      StrCat(valBuffer, ' - invalid DBOPEN');
      srv_paramsetoutput(srvproc, 3, valBuffer, StrLen(valBuffer), System.False);
      srv_senddone (srvproc, SRV_DONE_MORE, 0, 0);
      dbfreelogin(loginrec);
      Result:=1;
      exit;
    end
....
    bufQuery:='Select max(maxrec) from '+StrPas(@TableName[0]);
    // Execute the SELECT * FROM table.
    dbcmd(dbproc, PAnsiChar(bufQuery));
    rc := dbsqlexec(dbproc);
    if rc=FAIL then begin
      valBuffer:='DBSQLEXEC - is failed';
      srv_paramsetoutput(srvproc, 3, valBuffer, StrLen(valBuffer), System.False);
      srv_senddone (srvproc, SRV_DONE_MORE, 0, 0);
      dbclose( dbproc );
      dbfreelogin(loginrec);
      Result:=1;
      exit;
    end;
....

Далее регистрируем и вызываем ее функцию из QA, например :

declare @maxREC binary(8), @table_name varchar(200), @rs int,  @msg varchar(256)
select @table_name = 'katorg'
exec @rc = master..GetNrecSomeTable @table_name, @maxREC OUTPUT, @msg OUTPUT
select @rc, @table_name, @maxREC, @msg 


При таком вызове получаем в отладочный @msg 'DBSQLEXEC - is failed' ((
Если же отдать имя таблицы вот так :
select @table_name = '<имя БД>.dbo.katorg'

то функция из dll отрабатывает и получаем требуемое значение в @maxREC !
Может кто то подскажет почему так по разному отрабатывает DBSQLEXEC в такой ситуации ?
В хэлпе писано о ней 'The most common reason for failing is a Transact-SQL syntax error or SQL Server permission violation. Other reasons include incorrect column or table names..' Но вроде с этим все в поряде !
Или вообще может дело в другом ...

Сообщение было отредактировано: 14 июл 09, 18:25
14 июл 09, 12:57    [7412904]     Ответить | Цитировать Сообщить модератору
 Re: некорректность в работе ESP ?....  [new]
Crimean
Member

Откуда:
Сообщений: 13148
переделывайте дизайн. вторым вопросом будет "а почему так медленно". динамика в UDF - зло большое и запрещена не зря. пытаясь так ее обойти вы наживете себе множество проблем
в худшем случае на CLR это сделайте
14 июл 09, 13:20    [7413072]     Ответить | Цитировать Сообщить модератору
 Re: некорректность в работе ESP ?....  [new]
Зайцев Фёдор
Member

Откуда: Лужки
Сообщений: 5308
Crimean
в худшем случае на CLR это сделайте
в 2000 может не получиться)
14 июл 09, 13:49    [7413322]     Ответить | Цитировать Сообщить модератору
 Re: некорректность в работе ESP ?....  [new]
densof123
Member

Откуда:
Сообщений: 41
Да я не спорю по поводы скорострельности. Но людей этот варинат устраивает...
Все же по проблеме есть какие то мысли ? похоже с определением имени базы проблемы есть какие то при работе из pas-а этой самой функциональсти ods...
14 июл 09, 14:40    [7413645]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить