从 Laravel return 空 Ubuntu 调用 SQL 服务器 SP

Calling SQL Server SP from Laravel return empty on Ubuntu

我正在从 Laravel 5.8 调用 SQL Server 2005 存储过程。如果 运行 在 windows (10) 上,它 return 的值,但是如果 ubuntu (18.04) 上的 运行,return 空数组。

$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', '')
);

我的 SP 在 SQLSVR 2005

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;

我还检查了 运行ning 在 SQL 服务器上的查询,下面是

的 screehoot

我发现 windows 和 ubuntu 在调用 SP 时有不同的方式,因为我们可以看到来自 windows 机器

的 SSMS 分析器的以下屏幕截图

还将“select”更改为“原始”,使查询根本不执行。

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', '')
    );