如何解决从Laravel调用SQL Server SP在Ubuntu上返回空
我正在从Laravel 5.8调用SQL Server 2005存储过程。如果在Windows(10)上运行,它将返回值,但如果在ubuntu(18.04)上运行,则返回空数组。
$mcu_hasil_lab = DB::connection($unit_url . '_api_proitweb')
->select(
'SET ANSI_NULLS ON; SET ANSI_WARNINGS ON; EXEC splbrpt_Cetak_Hasil_MCU_new ?,?,?',array($nobukti,'03','')
);
我在SQLSVR 2005上的SP
USE [PROHMS_DEV];
GO
/****** Object: StoredProcedure [dbo].[splbrpt_Cetak_Hasil_MCU_new] Script Date: 08/09/2020 17.56.13 ******/
SET ANSI_NULLS ON;
GO
SET QUOTED_IDENTIFIER ON;
GO
ALTER PROCEDURE [dbo].[splbrpt_Cetak_Hasil_MCU_new] @nolab CHAR(15),@cetakan CHAR(2),@cetak TEXT
AS
IF @cetakan = '03'
BEGIN
SELECT hd.noreg,reg.norm,reg.TglTrans AS tgldaftar,reg.JamTrans AS jamdaftar,reg.TglTrans AS tglselesai,reg.JamTrans AS jamselesai,reg.umurtahun,reg.umurbulan,reg.umurhari,ks.nmkduser AS pasienseks,ISNULL(pk.nmkduser,'') AS PekerjaanPasien,hd.kddokter,m.nama AS namadokter,'Pasien Medical Check Up' AS jenispasien,hd.NoBukti AS nolab,hd.NoLabLIS AS NoLabLIS,RTRIM(reg.nama) + ' ' + RTRIM(reg.marga) AS namapasien,s.kdtest AS kdtestawal,tsawal.nmtest AS nmtestawal,s.kdtestakhir AS kdtest,RTRIM(tsakhir.nmtest) AS nmtest,s.kdfraction,f.nmfraction,ISNULL(su.nmkduser,'') AS UnitMtx,ISNULL(su2.nmkduser,'') AS UnitMtxInt,mf.nnormal AS nnormalstd,mf.nnormalint AS nnormalint,h.btsmin,h.btsmax,h.nilaistd,h.NilaiStd AS NilaiStdInt,h.unit,h.updater,h.tglupdate,h.chasilLIS AS cHasil,--DIganti Untuk Baca Cetak Hasil LIS (Hendrik)
0 AS nHasil,0 AS nhasilint,-- h.unit,h.chasil,-- h.nhasil,(h.nhasil * mf.KonversiSatuan) as nhasilint,h.umurhr,h.umurmax,h.satumur,h.nsatumur,ISNULL(gr.nmgroup,'') AS nmgroup,ISNULL(kl.nmkel,'') AS nmkel,gr.urutan,kl.Urutan AS UrutanKel,s.nmketerangan,s.kdketerangan,dp.nama,ISNULL(kf.nmkduser,'') AS kelfraction,'MCU' AS asal,'MCU' AS poliruang,hd.CatatanLB AS catatan,'Medical Check Up' AS nmkelas,(
SELECT nilai
FROM setvar
WHERE app = 'LB_'
AND kode = 'dok1'
) AS doklab1,(
SELECT nilai
FROM setvar
WHERE app = 'LB_'
AND kode = 'dok2'
) AS doklab2,(
SELECT nilai
FROM setvar
WHERE app = 'LB_'
AND kode = 'penanggungjawab'
) AS pnanggungjwb,RTRIM(reg.Jalan) + ' ' + RTRIM(reg.Gang) AS AlamatPasien,ISNULL(mf.KonversiSatuan,0) AS KonversiSatuan,-- untuk hasil laboratorium agar dapat bertingkat
dbo.fGetLevelHasilLB(s.KdKeterangan) AS LevelHasil,RTRIM(LEFT(CAST(s.KdKeterangan AS VARCHAR(500)),LEN(RTRIM(CAST(s.KdKeterangan AS VARCHAR(500)))) - LEN(RTRIM(s.KdFraction)))) AS KdHeader,-- agar bisa sort berdasarkan nomor urut yang ada di Matrix Test - Fraction
dbo.fGetNoUrutHasilLB(s.KdKeterangan,2,'Header') AS HeaderLv02,dbo.fGetNoUrutHasilLB(s.KdKeterangan,3,'Header') AS HeaderLv03,4,'Header') AS HeaderLv04,5,'Header') AS HeaderLv05,6,'Header') AS HeaderLv06,7,'Header') AS HeaderLv07,8,'Header') AS HeaderLv08,9,'Header') AS HeaderLv09,10,'Header') AS HeaderLv10,'Header_Name') AS HeaderNameLv02,'Header_Name') AS HeaderNameLv03,'Header_Name') AS HeaderNameLv04,'Header_Name') AS HeaderNameLv05,'Header_Name') AS HeaderNameLv06,'Header_Name') AS HeaderNameLv07,'Header_Name') AS HeaderNameLv08,'Header_Name') AS HeaderNameLv09,'Header_Name') AS HeaderNameLv10,'NoUrut') AS NoUrutLv02,'NoUrut') AS NoUrutLv03,'NoUrut') AS NoUrutLv04,'NoUrut') AS NoUrutLv05,'NoUrut') AS NoUrutLv06,'NoUrut') AS NoUrutLv07,'NoUrut') AS NoUrutLv08,'NoUrut') AS NoUrutLv09,'NoUrut') AS NoUrutLv10,h.metode
FROM mcu_HdTransaksi hd
INNER JOIN mcu_reg reg ON reg.noreg = hd.noreg
INNER JOIN medis m ON m.kode = hd.kddokter
INNER JOIN
(
SELECT kduser,nmkduser
FROM stdfielddt
WHERE kdfield = 'kdseks'
) ks ON reg.kdseks = ks.kduser
LEFT JOIN
(
SELECT kduser,nmkduser
FROM stdfielddt
WHERE kdfield = 'pekerjaan'
) pk ON pk.kduser = reg.kdpekerjaan
INNER JOIN lb_strukturmcu s ON s.nolab = hd.nobukti
INNER JOIN lb_test tsawal ON tsawal.kdtest = s.kdtest
INNER JOIN lb_test tsakhir ON tsakhir.kdtest = s.kdtestakhir
INNER JOIN lb_fraction f ON f.kdfraction = s.kdfraction
INNER JOIN lb_hasilmcu h ON h.nobukti = s.nolab
AND h.kdfraction = s.kdfraction
AND s.kdtestakhir = h.kdtest
LEFT JOIN lb_mtxtestfr mf ON mf.kdfraction = h.kdfraction
AND mf.kdtest = s.kdtestakhir
LEFT JOIN
(
SELECT kduser,nmkduser
FROM stdfielddt
WHERE kdfield = 'lb_unit'
) su ON su.kduser = mf.unit
LEFT JOIN
(
SELECT kduser,nmkduser
FROM stdfielddt
WHERE kdfield = 'lb_unit'
) su2 ON su2.kduser = mf.unitint
LEFT JOIN
(
SELECT kduser,nmkduser
FROM stdfielddt
WHERE kdfield = 'lb_klfr'
) kf ON kf.kduser = f.deskripsi
LEFT JOIN lb_group gr ON gr.kdgroup = tsakhir.kdgroup
LEFT JOIN lb_kel kl ON kl.kdkel = tsakhir.kdkel
AND tsakhir.kdgroup = kl.kdgroup
CROSS JOIN
(
SELECT nama,nilai
FROM setvar
WHERE kode = 'dokpat'
) dp
WHERE hd.ValidLB = 1
AND hd.nobukti = @nolab
AND gr.cetakan = '01'
-- And @cetak like '%' + rtrim(f.kdfraction)+',%'
--start-tambahan jeff: protek cetakan lama utk data lama only
AND hd.tglvalidasiLB >= '2012-06-01'
--end-tambahan jeff: 2012-12-10
ORDER BY HeaderLv02,NoUrutLv02,HeaderLv03,NoUrutLv03,HeaderLv04,NoUrutLv04,HeaderLv05,NoUrutLv05,HeaderLv06,NoUrutLv06,HeaderLv07,NoUrutLv07,HeaderLv08,NoUrutLv08,HeaderLv09,NoUrutLv09,HeaderLv10,NoUrutLv10,s.kdfraction;
END;
ELSE
BEGIN
SELECT hd.noreg,ks.keterangan AS pasienseks,tsawal.nmtest2 AS nmtestawal,RTRIM(tsakhir.nmtest2) AS nmtest,f.nmfraction2,ISNULL(gr.nmgroup2,-- agar bisa sort berdasarkan nomor urut yang ada di Matrix Test - Fraction
dbo.fGetNoUrutHasilLBING(s.KdKeterangan,dbo.fGetNoUrutHasilLBING(s.KdKeterangan,'NoUrut') AS NoUrutLv10
FROM mcu_HdTransaksi hd
INNER JOIN mcu_reg reg ON reg.noreg = hd.noreg
INNER JOIN medis m ON m.kode = hd.kddokter
INNER JOIN
(
SELECT kduser,nmkduser,keterangan
FROM stdfielddt
WHERE kdfield = 'kdseks'
) ks ON reg.kdseks = ks.kduser
LEFT JOIN
(
SELECT kduser,keterangan
FROM stdfielddt
WHERE kdfield = 'pekerjaan'
) pk ON pk.kduser = reg.kdpekerjaan
INNER JOIN lb_strukturmcu s ON s.nolab = hd.nobukti
INNER JOIN lb_test tsawal ON tsawal.kdtest = s.kdtest
INNER JOIN lb_test tsakhir ON tsakhir.kdtest = s.kdtestakhir
INNER JOIN lb_fraction f ON f.kdfraction = s.kdfraction
INNER JOIN lb_hasilmcu h ON h.nobukti = s.nolab
AND h.kdfraction = s.kdfraction
AND s.kdtestakhir = h.kdtest
LEFT JOIN lb_mtxtestfr mf ON mf.kdfraction = h.kdfraction
AND mf.kdtest = s.kdtestakhir
LEFT JOIN
(
SELECT kduser,keterangan
FROM stdfielddt
WHERE kdfield = 'lb_unit'
) su ON su.kduser = mf.unit
LEFT JOIN
(
SELECT kduser,keterangan
FROM stdfielddt
WHERE kdfield = 'lb_unit'
) su2 ON su2.kduser = mf.unitint
LEFT JOIN
(
SELECT kduser,keterangan
FROM stdfielddt
WHERE kdfield = 'lb_klfr'
) kf ON kf.kduser = f.deskripsi
LEFT JOIN lb_group gr ON gr.kdgroup = tsakhir.kdgroup
LEFT JOIN lb_kel kl ON kl.kdkel = tsakhir.kdkel
AND tsakhir.kdgroup = kl.kdgroup
CROSS JOIN
(
SELECT nama,%'
--start-tambahan jeff: protek cetakan lama utk data lama only
AND hd.tglvalidasiLB >= '2012-06-01'
--end-tambahan jeff: 2012-12-10
ORDER BY HeaderLv02,s.kdfraction;
END;
我还检查了查询是否在SQL Server上运行,以下是此内容的
我发现调用SP时Windows和ubuntu有不同的方式,因为您可以从Windows机器上看到SSMS分析器的以下屏幕截图
还将“选择”更改为“原始”,使查询根本无法执行。
windows使用RPC:Completed,而ubuntu使用SQL:BatchCompleted。
我在这里想念什么?
解决方法
我通过删除“ SET ANSI_NULLS ON; SET ANSI_WARNINGS ON;”来完成这项工作。从代码中
mcu_hasil_lab = DB::connection($unit_url . '_api_proitweb')
->select(
EXEC splbrpt_Cetak_Hasil_MCU_new ?,?,?',array($nobukti,'03','')
);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。