如何在Laravel 8中调用SQL Server存储过程并按参数筛选数据
问题原因
你的存储过程中WHERE筛选条件存在参数引用错误,导致条件恒成立:
存储过程定义的入参名为
@id_verifikator,但查询条件中你写成了tb_kasir_set_verifikator.id_verifikator = id_verifikator,数据库会将等号两侧都识别为表的id_verifikator字段,相当于1=1的恒成立条件,所以无论传入什么参数都会返回全表数据。
解决方案
1. 修正存储过程逻辑
修改存储过程的筛选条件,给参数加上@前缀明确引用入参:
ALTER procedure [dbo].[spx_kasir_verifikator_GetData_web] @id_verifikator int as begin SELECT * FROM tb_kasir_set_verifikator WHERE tb_kasir_set_verifikator.id_verifikator = @id_verifikator; end
修改后重新执行该SQL更新存储过程即可生效。
2. (可选)优化Laravel调用写法
为了避免多参数场景下的参数顺序匹配错误,可以明确指定参数名调用,写法更稳妥:
public function show($id_verifikator) { $setverifikator = DB::select("exec spx_kasir_verifikator_GetData_web @id_verifikator = ?",[$id_verifikator]); dd($setverifikator); }
内容的提问来源于stack exchange,提问作者Dear Janice
相关产品推荐
相关产品推荐

