【问题标题】:Insert from SQL to ORACLE with LINKED SERVER使用 LINKED SERVER 从 SQL 插入到 ORACLE
【发布时间】:2018-09-20 14:07:50
【问题描述】:

我在sql server 2008中有下一个SP,如果我从SQL SERVER MANAGMENT执行这个SP(右击,执行存储过程),没有任何问题,一切都正确执行,但是当这个SP被调用时从 WEB(我的服务器外部的网页),不执行第 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

【问题讨论】:

    标签: sql-server linked-server graph-store-protocol


    【解决方案1】:

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

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

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

    修复:

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

    【讨论】:

    • 我已经尝试过了,但它不起作用。那不是问题。谢谢
    【解决方案2】:

    我使用转换格式 varchar 将 varchar 发送到插入。此行发送不带小时的日期,并且有效。

    DATEADD(DAY,5,(CAST(GETDATE() AS date)))
    

    【讨论】:

      猜你喜欢
      • 2023-02-24
      • 1970-01-01
      • 2013-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-27
      • 2011-05-07
      • 1970-01-01
      相关资源
      最近更新 更多