Sql server 从Laravel调用SQL Server SP在Ubuntu上返回空
我正在从Laravel5.8调用SQLServer2005存储过程。如果在windows(10)上运行,则返回值;如果在ubuntu(18.04)上运行,则返回空数组 SQLSVR 2005上的我的SPSql server 从Laravel调用SQL Server SP在Ubuntu上返回空,sql-server,laravel,ubuntu,stored-procedures,Sql Server,Laravel,Ubuntu,Stored Procedures,我正在从Laravel5.8调用SQLServer2005存储过程。如果在windows(10)上运行,则返回值;如果在ubuntu(18.04)上运行,则返回空数组 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_NUL
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.updater, h.tglupdate, 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,
dbo.fGetNoUrutHasilLB(s.KdKeterangan, 4, 'Header') AS HeaderLv04,
dbo.fGetNoUrutHasilLB(s.KdKeterangan, 5, 'Header') AS HeaderLv05,
dbo.fGetNoUrutHasilLB(s.KdKeterangan, 6, 'Header') AS HeaderLv06,
dbo.fGetNoUrutHasilLB(s.KdKeterangan, 7, 'Header') AS HeaderLv07,
dbo.fGetNoUrutHasilLB(s.KdKeterangan, 8, 'Header') AS HeaderLv08,
dbo.fGetNoUrutHasilLB(s.KdKeterangan, 9, 'Header') AS HeaderLv09,
dbo.fGetNoUrutHasilLB(s.KdKeterangan, 10, 'Header') AS HeaderLv10,
dbo.fGetNoUrutHasilLB(s.KdKeterangan, 2, 'Header_Name') AS HeaderNameLv02,
dbo.fGetNoUrutHasilLB(s.KdKeterangan, 3, 'Header_Name') AS HeaderNameLv03,
dbo.fGetNoUrutHasilLB(s.KdKeterangan, 4, 'Header_Name') AS HeaderNameLv04,
dbo.fGetNoUrutHasilLB(s.KdKeterangan, 5, 'Header_Name') AS HeaderNameLv05,
dbo.fGetNoUrutHasilLB(s.KdKeterangan, 6, 'Header_Name') AS HeaderNameLv06,
dbo.fGetNoUrutHasilLB(s.KdKeterangan, 7, 'Header_Name') AS HeaderNameLv07,
dbo.fGetNoUrutHasilLB(s.KdKeterangan, 8, 'Header_Name') AS HeaderNameLv08,
dbo.fGetNoUrutHasilLB(s.KdKeterangan, 9, 'Header_Name') AS HeaderNameLv09,
dbo.fGetNoUrutHasilLB(s.KdKeterangan, 10, 'Header_Name') AS HeaderNameLv10,
dbo.fGetNoUrutHasilLB(s.KdKeterangan, 2, 'NoUrut') AS NoUrutLv02,
dbo.fGetNoUrutHasilLB(s.KdKeterangan, 3, 'NoUrut') AS NoUrutLv03,
dbo.fGetNoUrutHasilLB(s.KdKeterangan, 4, 'NoUrut') AS NoUrutLv04,
dbo.fGetNoUrutHasilLB(s.KdKeterangan, 5, 'NoUrut') AS NoUrutLv05,
dbo.fGetNoUrutHasilLB(s.KdKeterangan, 6, 'NoUrut') AS NoUrutLv06,
dbo.fGetNoUrutHasilLB(s.KdKeterangan, 7, 'NoUrut') AS NoUrutLv07,
dbo.fGetNoUrutHasilLB(s.KdKeterangan, 8, 'NoUrut') AS NoUrutLv08,
dbo.fGetNoUrutHasilLB(s.KdKeterangan, 9, 'NoUrut') AS NoUrutLv09,
dbo.fGetNoUrutHasilLB(s.KdKeterangan, 10, '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,
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.keterangan 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.nmtest2 AS nmtestawal,
s.kdtestakhir AS kdtest,
RTRIM(tsakhir.nmtest2) AS nmtest,
s.kdfraction,
f.nmfraction2,
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.chasil,
-- h.nhasil, (h.nhasil * mf.KonversiSatuan) as nhasilint,
h.unit,
h.updater,
h.tglupdate,
h.chasilLIS AS cHasil, --DIganti Untuk Baca Cetak Hasil LIS (Hendrik)
0 AS nHasil,
0 AS nhasilint,
h.umurhr,
h.umurmax,
h.satumur,
h.nsatumur,
ISNULL(gr.nmgroup2, '') 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.fGetNoUrutHasilLBING(s.KdKeterangan, 2, 'Header') AS HeaderLv02,
dbo.fGetNoUrutHasilLBING(s.KdKeterangan, 3, 'Header') AS HeaderLv03,
dbo.fGetNoUrutHasilLBING(s.KdKeterangan, 4, 'Header') AS HeaderLv04,
dbo.fGetNoUrutHasilLBING(s.KdKeterangan, 5, 'Header') AS HeaderLv05,
dbo.fGetNoUrutHasilLBING(s.KdKeterangan, 6, 'Header') AS HeaderLv06,
dbo.fGetNoUrutHasilLBING(s.KdKeterangan, 7, 'Header') AS HeaderLv07,
dbo.fGetNoUrutHasilLBING(s.KdKeterangan, 8, 'Header') AS HeaderLv08,
dbo.fGetNoUrutHasilLBING(s.KdKeterangan, 9, 'Header') AS HeaderLv09,
dbo.fGetNoUrutHasilLBING(s.KdKeterangan, 10, 'Header') AS HeaderLv10,
dbo.fGetNoUrutHasilLBING(s.KdKeterangan, 2, 'Header_Name') AS HeaderNameLv02,
dbo.fGetNoUrutHasilLBING(s.KdKeterangan, 3, 'Header_Name') AS HeaderNameLv03,
dbo.fGetNoUrutHasilLBING(s.KdKeterangan, 4, 'Header_Name') AS HeaderNameLv04,
dbo.fGetNoUrutHasilLBING(s.KdKeterangan, 5, 'Header_Name') AS HeaderNameLv05,
dbo.fGetNoUrutHasilLBING(s.KdKeterangan, 6, 'Header_Name') AS HeaderNameLv06,
dbo.fGetNoUrutHasilLBING(s.KdKeterangan, 7, 'Header_Name') AS HeaderNameLv07,
dbo.fGetNoUrutHasilLBING(s.KdKeterangan, 8, 'Header_Name') AS HeaderNameLv08,
dbo.fGetNoUrutHasilLBING(s.KdKeterangan, 9, 'Header_Name') AS HeaderNameLv09,
dbo.fGetNoUrutHasilLBING(s.KdKeterangan, 10, 'Header_Name') AS HeaderNameLv10,
dbo.fGetNoUrutHasilLBING(s.KdKeterangan, 2, 'NoUrut') AS NoUrutLv02,
dbo.fGetNoUrutHasilLBING(s.KdKeterangan, 3, 'NoUrut') AS NoUrutLv03,
dbo.fGetNoUrutHasilLBING(s.KdKeterangan, 4, 'NoUrut') AS NoUrutLv04,
dbo.fGetNoUrutHasilLBING(s.KdKeterangan, 5, 'NoUrut') AS NoUrutLv05,
dbo.fGetNoUrutHasilLBING(s.KdKeterangan, 6, 'NoUrut') AS NoUrutLv06,
dbo.fGetNoUrutHasilLBING(s.KdKeterangan, 7, 'NoUrut') AS NoUrutLv07,
dbo.fGetNoUrutHasilLBING(s.KdKeterangan, 8, 'NoUrut') AS NoUrutLv08,
dbo.fGetNoUrutHasilLBING(s.KdKeterangan, 9, 'NoUrut') AS NoUrutLv09,
dbo.fGetNoUrutHasilLBING(s.KdKeterangan, 10, '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,
nmkduser,
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,
nmkduser,
keterangan
FROM stdfielddt
WHERE kdfield = 'lb_unit'
) su ON su.kduser = mf.unit
LEFT JOIN
(
SELECT kduser,
nmkduser,
keterangan
FROM stdfielddt
WHERE kdfield = 'lb_unit'
) su2 ON su2.kduser = mf.unitint
LEFT JOIN
(
SELECT kduser,
nmkduser,
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,
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;
我还检查了查询是否在SQL Server上运行,下面是
我发现windows和ubuntu在调用SP时有不同的方式,我们可以从windows机器上看到下面SSMS profiler的屏幕截图
还将“select”更改为“raw”,使查询根本无法执行
windows使用RPC:Completed,而ubuntu使用SQL:BatchCompleted
我在这里遗漏了什么?我通过从代码中删除“设置ANSI\u空值为开;设置ANSI\u警告为开”来实现这一点
mcu_hasil_lab = DB::connection($unit_url . '_api_proitweb')
->select(
EXEC splbrpt_Cetak_Hasil_MCU_new ?,?,?',
array($nobukti, '03', '')
);
请编辑您的问题以包括新的代码。很有可能是行数问题。“splbrpt_Cetak_Hasil_MCU_new”在SSMS中运行得很好,如果我在windows上运行我的laravel项目,但如果我在ubuntu上运行我的laravel项目,它将返回空
mcu_hasil_lab = DB::connection($unit_url . '_api_proitweb')
->select(
EXEC splbrpt_Cetak_Hasil_MCU_new ?,?,?',
array($nobukti, '03', '')
);