我有一个MSSQL
存储过程:
BEGIN
SET NOCOUNT ON;
SELECT [ID],
[Type],
[message]
FROM [ir.pay].[dbo].[notifications]
WHERE ReciverID = @userID;
SELECT ID AS id,
Website AS website,
Status AS status
FROM dbo.Customers
WHERE UserID = @userID;
END;
我正在使用我的laravel
应用执行此操作:
DB::connection('sqlsrv')->select('EXEC StoredProcedureName @userID=1');
它只返回第一个SELECT
查询结果。
我如何获得两个结果集?
答案 0 :(得分:1)
我认为您的存储过程返回多个结果集,因此您必须移动到下一个结果集。我不熟悉Laravel,但我认为您使用SQLSRV驱动程序用于PHP。因此,在这种情况下,我使用MouseUp
或sqlsrv_next_result()
。在Laravel中找到合适的方法并检查。
答案 1 :(得分:1)
通过编写波纹管功能解决:
function get_multi_result_set($conn, $statement)
{
$results = [];
$pdo = DB::connection($conn)->getPdo();
$result = $pdo->prepare($statement);
$result->execute();
do {
$resultSet = [];
foreach ($result->fetchall(PDO::FETCH_ASSOC) as $res) {
array_push($resultSet, $res);
}
array_push($results, $resultSet);
} while ($result->nextRowset());
return $results;
}
答案 2 :(得分:0)
您需要union
:
SELECT [ID], [Type], [message]
FROM [ir.pay].[dbo].[notifications]
WHERE ReciverID = @userID
UNION ALL
SELECT ID, Website, Status
FROM dbo.Customers
WHERE UserID = @userID;
答案 3 :(得分:0)
您可以利用DB::statement();
为了创建商店程序,您可以像这样创建。 E.g
DB::statement('
BEGIN
SET NOCOUNT ON;
SELECT [ID],
[Type],
[message]
FROM [ir.pay].[dbo].[notifications]
WHERE ReciverID = @userID;
SELECT ID AS id,
Website AS website,
Status AS status
FROM dbo.Customers
WHERE UserID = @userID;
END;
');
要运行商店程序,您可以
DB::connection('sqlsrv')->statement('EXEC StoredProcedureName @userID=1');
希望这有帮助。