我正在使用sqlsrv驱动程序,并且从服务器获取数据也很好,使用“ sqlsrv_query”,我已经调用了许多过程,并且一切正常,但是不适用于一个过程。
所有先前的所有存储过程都刚刚选择了数据库,但这首先在表中插入一些信息,然后返回一个值(我想知道这是否是引起问题的原因)。在这里我无法读取值
我这样称呼SP
$consulta = "exec TP_APP_WEB @CONTRATO = '2007061006201', @AFILIADO = '2007060389', @CODIGO_PRESTADOR = '00018', @OP = 'I'";
然后我使用“ sqlsrv_query”或“ sqlsrv_execute”执行查询
并且我正尝试通过多种方式阅读回复:
sqlsrv_fetch sqlsrv_get_field sqlsrv_fetch_object sqlsrv_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"```
答案 0 :(得分:0)
说明:
解释此意外行为的一个可能原因是您的存储过程可能返回多个结果集。使用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));
...
?>
注释:
如果您有INSERT
,DELETE
或UPDATE
语句,则在存储过程的第一行使用SET NOCOUNT ON会阻止发送有关受影响行数的信息设置。