0

我在sql server 2008中有下一个SP。如果我从SQL SERVER MANAGMENT(右击,执行存储过程)执行这个SP,它没有任何问题,一切都正确执行,但是当从WEB调用这个SP时(我的服务器外部的网页),不执行第 3 步。此步骤使用到 Oracle 11G 的 LINKED SERVER。日志记录下一个错误:

从字符串转换日期和/或时间时转换失败

USE [Boton_Pago_Plus]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[PC_Guarda_Transaccion] 
    (@id_intento int,@RUTSINGUION nchar(12),@valor_pagado numeric, @id_Servipag int, @datos_Servipag nchar(300))
AS
BEGIN


        Set ANSI_NULLS ON;
        Set ANSI_WARNINGS ON;
        SET NOCOUNT ON;

    BEGIN TRY

        -- Insert statements for procedure here
        DECLARE @RUTSINGUION VARCHAR(500);
        DECLARE @INDEXRUT INT;

        --STEP 1
        INSERT INTO Transaccion (Rut_cliente,Valor_pagado,Id_servipag,Fecha_ingreso,Datos_servipag,Id_intento)
        VALUES  (@RUTSINGUION,@valor_pagado,@id_Servipag,GETDATE(),@datos_Servipag,@id_intento);    

        --STEP 2
        UPDATE Intento SET Fecha_cierre = GETDATE(), Boleta = @id_Servipag where Id_intento = @id_intento;


        --STEP 3        
        INSERT OPENQUERY (ORA_PEHUEN_PLUS_UTILS, 'SELECT * FROM METLIFE.BLACKLIST')
        VALUES (@RUTSINGUION,'METLF','CL',1,NULL,CONVERT(VARCHAR(10), GETDATE(), 103),DATEADD(DAY,5, CONVERT(VARCHAR(10), GETDATE(), 103))
        ,'servipag',CONVERT(VARCHAR(10), GETDATE(), 103),'PAGO SERVIPAG','Inhibido 5 dias pago servipag')

    END TRY
    BEGIN CATCH
        INSERT INTO LOG_ERROR
        (
        NUMERO_ERROR ,
        SEVERIDAD_ERROR ,
        ESTADO_ERROR ,
        PROCEDIMIOENTO ,
        LINEA_ERROR ,
        MENSAJE,
        FECHA_ERROR
        )
        SELECT ERROR_NUMBER() AS errNumber
           , ERROR_SEVERITY() AS errSeverity  
           , ERROR_STATE() AS errState
           , ERROR_PROCEDURE() AS errProcedure
           , ERROR_LINE() AS errLine
           , ERROR_MESSAGE() AS errMessage,
           GETDATE()
    END CATCH
END
4

2 回答 2

0

您的查询中的问题,第 3 步,看起来您正在将日期转换为字符串,然后尝试对DATEADD字符串执行操作。如果DATEADD在转换为字符串之前这样做会更安全。

之前:(在您的 VALUES 子句中间)

DATEADD(DAY,5, CONVERT(VARCHAR(10), GETDATE(), 103))

使固定:

CONVERT(VARCHAR(10), DATEADD(DAY, 5, GETDATE()), 103)
于 2018-09-20T15:05:35.593 回答
0

我使用转换格式 varchar 将 varchar 发送到插入。该行发送不带小时的日期,并且可以正常工作。

DATEADD(DAY,5,(CAST(GETDATE() AS date)))
于 2018-09-21T18:29:29.377 回答