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

Откуда:
Сообщений: 14
Ситуация следующая:
Есть функция func1 возвращающая varchar с сгенерированным SELECT (кол-во столбцов динамическое).
Есть процедура proc1 в результате работы которой выводится таблица с результатом выполнения запроса из func1.
Результат выполнения процедуры (таблица с динамическим кол-вом столбцов) нужно передать в php-код, который на данный момент понимает только чистый select с любым заранее неизвестным кол-вом столбцов, а не функцию или процедуру в результате которого выполняется или генерируется этот select.

Есть ли способ select-ом получить результат работы процедуры proc1?

select * from openquery (DB, 'exec proc1') ругается на динамичность запроса.

заранее благодарен)

ЗЫ. Были мысли сделать view, но там аналогичная проблема с динамичностью запроса
3 окт 17, 21:15    [20840220]     Ответить | Цитировать Сообщить модератору
 Re: select из процедуры с динамическим запросом  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 4641
если вы и так формируете запрос динамически, то, что мешает сформировать корректный with result sets?

хотя, я бы решал вопрос вот с этим:
UncleFedor32
php-код, который на данный момент понимает только чистый select с любым заранее неизвестным кол-вом столбцов, а не функцию или процедуру
3 окт 17, 23:01    [20840480]     Ответить | Цитировать Сообщить модератору
 Re: select из процедуры с динамическим запросом  [new]
aleks222
Guest
UncleFedor32
Ситуация следующая:
Есть функция func1 возвращающая varchar с сгенерированным SELECT (кол-во столбцов динамическое).
Есть процедура proc1 в результате работы которой выводится таблица с результатом выполнения запроса из func1.
Результат выполнения процедуры (таблица с динамическим кол-вом столбцов) нужно передать в php-код, который на данный момент понимает только чистый select с любым заранее неизвестным кол-вом столбцов, а не функцию или процедуру в результате которого выполняется или генерируется этот select.

Есть ли способ select-ом получить результат работы процедуры proc1?

select * from openquery (DB, 'exec proc1') ругается на динамичность запроса.

заранее благодарен)

ЗЫ. Были мысли сделать view, но там аналогичная проблема с динамичностью запроса



Что за бред?
PHP замечательно исполняет exec AnyProc.
Сами не умеете - пригласите пионера.
4 окт 17, 05:58    [20840724]     Ответить | Цитировать Сообщить модератору
 Re: select из процедуры с динамическим запросом  [new]
UncleFedor32
Member

Откуда:
Сообщений: 14
Подскажите, пожалуйста, как можно обработать вывод через php. Пока не могу найти способ
4 окт 17, 06:41    [20840736]     Ответить | Цитировать Сообщить модератору
 Re: select из процедуры с динамическим запросом  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 425
var $res = 0;
$query = '{? = CALL [dbo].[procedure]( ?, ?, ?, ? )}';
$params = array(
  array( $res, SQLSRV_PARAM_OUT, SQLSRV_PHPTYPE_INT ),
  array( 'A', SQLSRV_PARAM_IN, SQLSRV_PHPTYPE_STRING( 'UTF-8' ) ),
  array( 'B', SQLSRV_PARAM_IN, SQLSRV_PHPTYPE_STRING( 'UTF-8' ) ),
  array( 'C', SQLSRV_PARAM_IN, SQLSRV_PHPTYPE_STRING( 'UTF-8' ) ),
  array( 4, SQLSRV_PARAM_IN, SQLSRV_PHPTYPE_INT )
);
$stmt = sqlsrv_query( $handle, $query, $params/*, array( 'QueryTimeout' => 30 )*/ );
if ( false !== $stmt ) {
  $results = array();
  if ( sqlsrv_has_rows( $stmt ) ) {
    do {
      $thisresult = array();
      while ( false !== ( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC ) ) ) {
        foreach( $row as $k => $v ) {
          if ( is_resource( $v ) ) {
            $row[$k] = stream_get_contents( $v );
          }
        }
        $thisresult[] = $row;
      }
       $results[] = $thisresult;
    } while ( false != ( $resultset = sqlsrv_next_result( $stmt ) ) );
  }
  sqlsrv_free_stmt( $stmt );
}
4 окт 17, 11:07    [20841326]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить