SQLSRV未阅读存储过程的响应



我正在使用sqlsrv驱动程序,我一直从服务器获取数据,使用" sqlsrv_query",我称之为许多过程,一切都很好,但是它不适用于一个过程程序。

所有以前的存储过程都刚刚选择了数据库,但是该过程首先插入表中的一些信息,然后返回一个值(我想知道这是否是导致问题的原因(。在这里,我无法阅读该值

我像这样称呼SP

$consulta = "exec TP_APP_WEB @CONTRATO = '2007061006201', @AFILIADO = '2007060389', @CODIGO_PRESTADOR = '00018', @OP = 'I'";

然后我使用" sqlsrv_query"或" sqlsrv_execute"执行查询

我正在尝试以多种方式阅读响应:

sqlsrv_fetchsqlsrv_get_fieldsqlsrv_fetch_objectsqlsrv_fetch_array

,他们都没有阅读响应。

我没有错误,只有空行,响应应该在哪里。

编辑:这是整个SP


select @maximo = max(orde_nume) from cap_tbl_orden_atencion where orde_sucu = '001' 
select 
    @anio_contrato = afco_anio, @mes_contrato = afco_mes, @tipo_contrato = afco_tipo, @numero_contrato = afco_nume, @anio_afiliado = afco_afan,
    @mes_afiliado = afco_afme, @numero_afiliado = afco_afnu, @plan = afco_plan, @porcentaje = porc_red, @codigo_contratante = CONT_CONT
from 
    cap_tbl_afiliado_por_contrato 
    inner join cap_tbl_copago_por_plan on afco_plan = cod_plan AND tipo_prestacion = '0101' and cobertura = '00'
    INNER JOIN CAP_TBL_CONTRATOS ON CONT_ANIO+CONT_MES+CONT_TIPO+CONT_NUME = afco_anio+afco_mes+afco_tipo+afco_nume
where 
    afco_anio+afco_mes+afco_tipo+afco_nume = @contrato and afco_afan+afco_afme+afco_afnu = @AFILIADO and afco_esta = 'A' 

 select @periodo =  max(periodo) from CAP_TBL_PERIODO_POR_CONTRATO where anio+mes+tipo+contrato = @CONTRATO
 if @maximo is null 
 set @maximo = 0 
 set @maximo = @maximo +1 
 set @NUMERO_ODA = right('0000000'+convert(varchar(7), @maximo), 7) 
SELECT @DESC_MOTIVO= 'ODA : '+@NUMERO_ODA, @fecha = getdate()
 IF @MAXIMO2 IS NULL 
 SET @MAXIMO2 = 0 
 SET @MAXIMO2 = @MAXIMO2 +1 
INSERT INTO CAP_TBL_AUTORIZACION_PROCESO 
 VALUES('001', @MAXIMO2, 54, @FECHA, @NUMERO_ODA, 0, 0, @desc_motivo, @DESC_MOTIVO, '197', '000', 0, 'A', GETDATE(), @anio_contrato, @mes_contrato, 
 @tipo_contrato, @numero_contrato) 
 insert into cap_tbl_orden_atencion 
 values ('001', @NUMERO_ODA, '01', GETDATE(), @CODIGO_PRESTADOR, @TIPO_PRESTADOR, @anio_contrato, @mes_contrato, @tipo_contrato, @numero_contrato, 
 @codigo_contratante, @tipo_contrato, @anio_afiliado, @mes_afiliado, @numero_afiliado, '', '', '', '', '0101', @porcentaje, @VALOR_ODA, 0, @valor_oda, 
 @VALOR_AFILIADO, @VALOR_CUBIERTO, @VALOR_CUBIERTO, @VALOR_AFILIADO, 'ODA WEB', 'C', 'A', '197', 'Z01', @TIPO_PRESTADOR, @CODIGO_PRESTADOR, @PLAN, '01', 
 0, @periodo, GETDATE(), 'N', '001', 0, DATEPART(YEAR, GETDATE()), DATEPART(MONTH, GETDATE()), DATEPART(DAY, GETDATE()), '00', 
 0, 0, 0, DATEPART(YEAR, GETDATE()), DATEPART(MONTH, GETDATE()), DATEPART(DAY, GETDATE()), '000', 0, 0, 0, '000', 
 0, '197', GETDATE(), '197', GETDATE(), '0101', '', '01', '01', 'N', '001', 0, 'WEB', 0, '01', '01') 
 SET @PRESTACION = '01-01-01-99961'
 if (@plan = 1 and @PLAN_PRESTADOR = 1) or (@plan = 2 and @PLAN_PRESTADOR = 2) or (@plan = 2 and @PLAN_PRESTADOR = 1)
    SET @PRESTACION = '01-01-01-99961'
 IF @PLAN = 1 AND @PLAN_PRESTADOR = 2
    SET @PRESTACION = '01-01-01-99993'
 IF @PLAN = 1 AND @PLAN_PRESTADOR = 3
    SET @PRESTACION = '01-01-01-99994'
 IF @PLAN = 2 AND @PLAN_PRESTADOR = 3
    SET @PRESTACION = '01-01-01-99995'
 IF @PLAN = 3 AND @PLAN_PRESTADOR = 1
    SET @PRESTACION = '01-01-01-99989'
 IF @PLAN = 3 AND @PLAN_PRESTADOR = 2
    SET @PRESTACION = '01-01-01-99988'
 IF @PLAN = 3 AND @PLAN_PRESTADOR = 3
    SET @PRESTACION = '01-01-01-99962'
INSERT INTO 
        CAP_TBL_DETALLE_ADICIONAL_ORDEN 
    VALUES( '001' , @NUMERO_ODA , 'PR' , 1 , '01' , '01', @PRESTACION , @VALOR_ODA , @PORCENTAJE , @VALOR_CUBIERTO , @VALOR_AFILIADO , '0101', 
 'A',@VALOR_ODA,3.29, @PLAN , '01' , 'Z10' , @tipo_prestador , @CODIGO_PRESTADOR , 1 , @VALOR_ODA , @VALOR_ODA, 0, @VALOR_ODA, @VALOR_ODA, 0, 0, 
 @VALOR_ODA, @porcentaje, @VALOR_AFILIADO, @VALOR_CUBIERTO) 
 update a               
set a.periodo_contrato = b.periodo              
from cap_tbl_ORDEN_ATENCION a,cap_tbl_periodos_por_contrato b               
where  a.ORDE_SUCU = '001' and a.ORDE_NUME = @NUMERO_ODA and              
a.ORDE_FECH between fecha_inicio and fecha_final and a.ORDE_COAN = B.anio and               
a.ORDE_COME = B.mes  and a.ORDE_COTI = B.tipo and a.ORDE_CONU = B.contrato   
insert into  tbl_consumos              
select sucursal,NUMERO,cod_cobertura,tipoprestacion,'000',sum(a.COBERTURA)              
from               
cap_tbl_detalle_ADICIONAL_ORDEN a              
where a.sucursal = '001' and A.NUMERO = @NUMERO_ODA
group by              
sucursal,A.NUMERO,cod_cobertura,TIPOPRESTACION        
select @tipo_s = sec_factura from CARTERA..ccb_tbl_caja where caja_sucu = '001' and usuario = 197 
SELECT @MAXIMO = SECUENCIA FROM CARTERA..CCB_TBL_SECUENCIA WHERE sucursal = '001' and TIPO = 'CA' 
IF @MAXIMO IS NULL 
SET @MAXIMO = 0 
SET @MAXIMO = @MAXIMO +1 
SELECT @NUMERO_FACTURA = SECUENCIA 
,@NRO_DOCUMENTO_P1= SECUENCIA_P1,@NRO_DOCUMENTO_P2= SECUENCIA_P2,@NRO_AUTORIZACION = 0 
 FROM CARTERA..CCB_TBL_SECUENCIA WHERE 
sucursal = '001' and 
TIPO = @TIPO_S 
IF @NUMERO_FACTURA IS NULL 
SET @NUMERO_FACTURA = 0 
SET @NUMERO_FACTURA = @NUMERO_FACTURA +1 

SET @NRO_DOCUMENTO_P3= RIGHT('0000000'+CONVERT(VARCHAR(10),@NUMERO_FACTURA),7) 
INSERT INTO CARTERA..CCB_TBL_CABECERA_RECIBO_CAJA 
VALUES('001', @MAXIMO, convert(date,@FECHA), @anio_contrato, @mes_contrato, @tipo_contrato, @numero_contrato, @codigo_contratante, 
    @VALOR_AFILIADO, 0, 0,0, 0,@VALOR_AFILIADO, '00', @fecha, 0, 'NV',@TIPO_S, @NUMERO_FACTURA, 'O', @NRO_DOCUMENTO_P1,@NRO_DOCUMENTO_P2,@NRO_DOCUMENTO_P3,
    @NRO_AUTORIZACION, @anio_afiliado,@mes_afiliado,@numero_afiliado,'O','O','001',0, 197,@FECHA,197, @fecha,
    CASE WHEN @TIPO_S IN ('F28','F30','F31','F32','F33','F34','F35','F36','F37') THEN 'I' ELSE NULL END ,NULL,NULL,NULL,NULL,NULL,NULL,NULL ,'C' 
) 
UPDATE CARTERA..CCB_TBL_SECUENCIA SET SECUENCIA = SECUENCIA +1 
WHERE sucursal = '001' and TIPO = 'CA' 
UPDATE CARTERA..CCB_TBL_SECUENCIA SET SECUENCIA = SECUENCIA +1 
WHERE sucursal = '001' and TIPO = @TIPO_S 
INSERT INTO CARTERA..CCB_TBL_DETALLE_RECIBO_CAJA                                                            
VALUES('001', @MAXIMO, 1, @anio_contrato,@mes_contrato,@tipo_contrato,@numero_contrato,'03','001',@NUMERO_ODA,@VALOR_AFILIADO)
EXEC CARTERA..CCB_PRO_MAN_DETALLE_RECIBO_CAJA 'F', '001', @maximo
INSERT INTO CARTERA..CCB_TBL_FORMA_PAGO_RECIBO 
VALUES('001', 'OD', @MAXIMO, 1, '03', 'TJ', @ENTIDAD, @CUENTA, 0, @VALOR_AFILIADO, '00',0, convert(date,@FECHA) , 
    'A', @fecha, 0,0, '090', '000', '197', @fecha,'197',@fecha ,'' ,'N','N',1) 
select @NUMERO_ODA "NUMERO_ODA"```

说明:

解释了这种意外行为的一个可能原因是,您的存储过程可能返回多个结果集。使用sqlsrv_next_result((使每个结果都活跃。

<?php
...
// Call stored procedure
$sql = "exec TP_APP_WEB @CONTRATO = '2007061006201', @AFILIADO = '2007060389', @CODIGO_PRESTADOR = '00018', @OP = 'I'";
$stmt = sqlsrv_query($conn, $sql);
if ($stmt === false) {
    echo "Error (sqlsrv_query): ".print_r(sqlsrv_errors(), true);
    exit;
}
// Fetch data
do {
    while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
        print_r($row, true);
    }
} while (sqlsrv_next_result($stmt));
...
?>

注意:

如果您具有INSERTDELETEUPDATE语句,则使用存储过程中的第一行AS in set nocount on AS第一排可以防止在结果集中发送有关受影响行的计数的信息。

最新更新