将数据类型varchar转换为数字时选择失败

我的选择是从table 1插入到table 2 ,当我运行它时,我收到以下消息:

Msg 8114,Level 16,State 5,Line 5
将数据类型varchar转换为数字时出错。

我从varchar转换为数字的列是:

  • titulos
  • 坎比奥
  • liquido
  • resultado
  • 如果我从选择中消除这些列它工作正常。

    谁能帮忙?

    这是实际的选择:

    INSERT INTO SICAVS1_Transacciones_con_ISIN 
    (tipo_operacion, fecha, cod_operacion,
     nombre, titulos, cambio, liquido,
     resultado, ISIN )
    SELECT DISTINCT st.tipo_operacion
                  , st.fecha
                  , st.cod_operacion
                  , st.nombre
                  , cast(st.titulos as DECIMAL(16,2))
                  , cast(st.cambio as DECIMAL(16,2))
                  , cast(st.liquido as DECIMAL(16,2))
                  , cast(st.resultado as DECIMAL(16,2))
                  , st.ISIN 
    FROM temp_Transacciones st WHERE NOT EXISTS
    (SELECT 1 
      FROM SICAVS1_Transacciones t2
      WHERE t2.tipo_operacion = st.tipo_operacion 
        AND t2.fecha = st.fecha
        AND t2.cod_operacion = st.cod_operacion
        AND t2.nombre = st.nombre
        AND t2.ISIN = st.ISIN)
    

    这是SICAVS1_transacciones_con_ISIN [dbo]的表格方案。[SICAVS1_Transacciones_con_ISIN]

    [ID] [int] IDENTITY(1,1) NOT NULL,
    [tipo_operacion] [varchar](30) NULL,
    [fecha] [varchar](10) NULL,
    [cod_operacion] [varchar](6) NULL,
    [nombre] [varchar](32) NULL,
    [titulos] [decimal](16, 2) NULL,
    [cambio] [decimal](16, 2) NULL,
    [liquido] [decimal](16, 2) NULL,
    [resultado] [decimal](16, 2) NULL,
    [ISIN] [varchar](20) NULL,
    [fecha_valor] [date] NULL,
    [type] [varchar](14) NULL,
    [categoria_1] [char](35) NULL,
    

    CONSTRAINT [PK__BNP_SICA__3214EC27DA21ECEF] ON [PRIMARY])ON [PRIMARY] ON PRIMARY KEY CLUSTERED([ID] ASC)WITH(PAD_INDEX = OFF,STATISTICS_NORECOMPUTE = OFF,IGNORE_DUP_KEY = OFF,ALLOW_ROW_LOCKS = ON,ALLOW_PAGE_LOCKS = ON)


    SQL Server 2012及更高版本

    只需使用Try_Convert即可:

    TRY_CONVERT将传递给它的值并尝试将其转换为指定的data_type。 如果转换成功,则TRY_CONVERT将返回值作为指定的data_type; 如果发生错误,则返回null。 但是,如果您请求明确不允许的转换,则TRY_CONVERT会失败并显示错误。

    阅读更多关于Try_Convert的信息。


    其中一行不是数字,你必须消除它们。 要找到它们:

    SELECT DISTINCT st.tipo_operacion
                  , st.fecha
                  , st.cod_operacion
                  , st.nombre
                  , st.titulos
                  , st.cambio
                  , st.liquido
                  , st.resultado
                  , st.ISIN 
    FROM temp_Transacciones st WHERE NOT EXISTS
    (SELECT 1 
      FROM SICAVS1_Transacciones t2
      WHERE t2.tipo_operacion = st.tipo_operacion 
        AND t2.fecha = st.fecha
        AND t2.cod_operacion = st.cod_operacion
        AND t2.nombre = st.nombre
        AND t2.ISIN = st.ISIN)
    WHERE ISNUMERIC(st.titulos) = 0
        OR ISNUMERIC(st.cambio) = 0
        OR ISNUMERIC(st.liquido) = 0
        OR ISNUMERIC(st.resultado) = 0
    

    请注意,这只能找到它们。 它不会帮助你自己解决问题。 没有办法将abc123转换为数字。

    链接地址: http://www.djcxy.com/p/84113.html

    上一篇: select fails when converting data type varchar to numeric

    下一篇: How to determine size of continious range for given criteria?