es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La precisión de los segundos fraccionarios excede la escala especificada en la vinculación de parámetros.

Cuando intento mover datos de una tabla de SQL Server 2019 a SQL Server 2012 utilizando un procedimiento almacenado con la ayuda de un servidor vinculado, obtengo el siguiente error:

El proveedor OLE DB “MSDASQL” para el servidor vinculado “SalesServer1” no pudo INSERTAR EN la tabla “[LinkedServer1].[SalesDepart].[dbo].[Employee_Salary]”.
El proveedor OLE DB “MSDASQL” para el servidor vinculado “SalesServer1” devolvió el mensaje “[Microsoft][ODBC Driver 17 para SQL Server] Desbordamiento de campo Datetime. La precisión de los segundos fraccionarios excede la escala especificada en la asignación de parámetros”.

La estructura de la tabla “Employee” es la misma en ambos servidores.

[Employee_Salary]
(
[SalaryID] [int] NOT NULL,
[Amount] [int] NOT NULL,
[Status] varchar NOT NULL,
[CreatedDate] [datetime] NOT NULL,
[EmployeeID][int] [NOT NULL]
)

Cuando ejecuto el procedimiento almacenado desde SQL Server 2019 en la base de datos “SalesDepart”, obtengo la excepción mostrada anteriormente.

Consulta en el procedimiento almacenado:

— Insertar registro en Employee_Salary
INSERT INTO SalesServer1.SalesDepart.dbo.Employee_Salary
([SalaryID], [Amount], [Description], [Status], [CreatedDate], [EmployeeID])
SELECT
SalaryID, Amount, Description, Status, CreatedDate, EmployeeID
FROM
Employee_Salary

Obtengo un error para la columna “CreatedDate”, el tipo de dato es “datetime”.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error indica que hay un problema con la precisión de los segundos fraccionarios de la columna CreatedDate en la tabla Employee_Salary. Parece que el tipo de dato datetime tiene una escala predeterminada diferente en SQL Server 2019 que en SQL Server 2012, lo que está causando el error de desbordamiento al insertar datos del servidor 2019 al servidor 2012.

    Una forma de resolver este problema sería convertir explícitamente la columna CreatedDate a un tipo de dato datetime2 con una precisión específica que coincida con el SQL Server 2012 de destino. La precisión del tipo de dato datetime2 representa el número de lugares decimales del componente de segundos fraccionarios.

    Aquí hay un ejemplo de consulta que convierte la columna CreatedDate a datetime2 con una precisión de 3:

    -- Insertar registro en Employee_Salary
    INSERT INTO SalesServer1.SalesDepart.dbo.Employee_Salary
        ([SalaryID], [Amount], [Description], [Status], [CreatedDate], [EmployeeID])
        SELECT  
            SalaryID, Amount, Description, Status, CONVERT(datetime2(3), CreatedDate), EmployeeID 
        FROM 
            Employee_Salary
    

    Esto debería resolver el error de desbordamiento truncando el componente de segundos fraccionarios de la columna CreatedDate para que coincida con la precisión del tipo de dato del SQL Server 2012 de destino.

Comments are closed.