Доброго дня! Столкнулся с такой вот проблемой:
Есть удаленный SQL Server, вроде 2012 (но это не точно), в котором есть хранимая процедура, которую необходимо использовать для авторизации в приложении на Laravel, пример запроса:
declare @Entity int, @CompName varchar(250)
exec [foo].[prcBar] 'userlogin', 'userpass', @Entity output, @CompName output
select @Entity, @CompName
В ответ получаю 2 поля - некий id и название. Соответственно при выполнении в консоли я получаю все эти данные. Но при отправке из лары я либо получаю пустой массив, либо ошибку что не объявлены переменные.
Как пробовал:
1.
$test = DB::transaction(function(){
DB::statement('declare @Entity int, @CompName varchar(250)');
DB::statement('exec [foo].[prcBar] ?, ?, @Entity output, @CompName output', ['userlogin', 'userpass']);
return DB::select('select @Entity, @CompName');
});
Получаю ошибку:
SQLSTATE[HY000]: General error: 20018 Must declare the scalar variable "@Entity". [20018] (severity 15) [exec [foo].[prcBar] 'userlogin', 'userpass', @Entity output, @CompName output] (SQL: exec [foo].[prcBar] userlogin, userpass, @Entity output, @CompName output)",
Без транзации результат такой же
2.
$test = DB::select(DB::raw('declare @Entity int, @CompName varchar(250)
exec [foo].[prcBar] ?, ?, @Entity output, @CompName output
select @Entity, @CompName'), ['userlogin', 'userpass']);
Получаю пустой массив
3.
$db = DB::connection()->getPdo();
$stmt = $db->prepare("
declare @Entity int, @CompName varchar(250)
exec [foo].[prcBar] 'userlogin', 'userpass', @Entity output, @CompName output
select @Entity, @CompName
");
$stmt->execute();
$test = $stmt->fetchAll(\PDO::FETCH_CLASS, 'stdClass');
получаю пустой массив
Это только основные варианты, из тех, которые я пробовал. Были еще всякие комбинации с DB:raw(),DB::table()->select() и совсем отбитые варианты "методом" тыка, которые уже и не припомню (все равно они не работали).
Единственный вариант, который я пока нашел - это изменить саму хранимку, добавив в нее нужный мне select, но пока это не возможно. Код самой процедуры, к сожалению, мне не доступен.
Собственно вопрос - как можно выполнить такой запрос? Заранее благодарен.