Я столкнулся с проблемой при вызове хранимой процедуры с использованием драйверов sqlsrv в laravel. Внутри процедуры есть несколько запросов с комбинацией выбора и вставки. Я не могу поделиться кодом здесь, поскольку это проблема конфиденциальности.
Так может ли кто-нибудь поделиться кодом, который может работать с laravel для вызова процедуры mssql с несколькими наборами строк результатов.
Заранее спасибо!!
Если вы используете хранимые процедуры действий, вам необходимо передать действие для выбора, вставки или обновления и т. д., Вы можете сделать это таким образом, чтобы $result = DB::select('CALL Procedure_Name(?,?,?)', array($action,$val1, $val2)); return $result;, эти ?,?,? - это параметры ваших процедур, и вы должны сделать все это в модели laravel.
@ EmmanuelHdzDíaz Спасибо за ответ, извините, но здесь проблема с конфиденциальностью, поэтому не могу поделиться кодом. Я проверил вашу ссылку, мы уже сделали это для mysql, но теперь мы ищем mssql.
@AkhtarMunir уже пробовал это, но не повезло, что он не работает для набора строк с несколькими результатами.
Что вы имеете в виду под многорядками? вы передаете массивы?
набор результатов с несколькими строками означает, что внутри процедуры есть несколько запросов, таких как выбор и вставка, поэтому он возвращает несколько наборов строк результатов для каждого запроса.






MS SQL Server поддерживает хранимые процедуры, которые могут возвращать более одного набора результатов. С помощью PHP и PDO вы можете получить эти наборы результатов с помощью метода PDOStatement :: nextRowset (). Важно отметить, что если у вас есть выходные параметры в хранимой процедуре, вам необходимо получить все наборы результатов, чтобы получить выходные значения.
Если Laravel не поддерживает nextRowset(), вы можете попытаться получить базовый экземпляр PDO с помощью метода getPdo() в экземпляре соединения и использовать этот экземпляр для выполнения оператора:
<?php
...
$pdo = DB::connection()->getPdo();
try {
$sql = "{CALL usp_TestProcedure(?)}";
$param = 'ParamValue';
$stmt = $pdo->prepare($sql);
$stmt->bindParam(1, $param);
$stmt->execute();
do {
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
print_r($row, true);
echo '<br>';
}
} while ($stmt->nextRowset());
} catch( PDOException $e ) {
die( "Error executing query" );
}
...
?>
Без вашего кода вам трудно помочь, может быть, вам поможет этот вопрос: ссылка на сайт