我的选择是从table 1
插入table 2
,当我运行它时,我收到以下消息:
Msg 8114,Level 16,State 5,Line 5
将数据类型varchar转换为数字时出错。
我从varchar转换为numeric的列是:
如果我从选择中删除这些列,它可以正常工作。
有人可以帮忙吗?
这是实际选择:
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,
约束[PK__BNP_SICA__3214EC27DA21ECEF] PRIMARY KEY CLUSTERED ( [ID] ASC )WITH(PAD_INDEX = OFF,STATISTICS_NORECOMPUTE = OFF,IGNORE_DUP_KEY = OFF,ALLOW_ROW_LOCKS = ON,ALLOW_PAGE_LOCKS = ON)ON [PRIMARY] )[主要]
答案 0 :(得分:0)
SQL Server 2012及更高版本
只需使用Try_Convert:
TRY_CONVERT获取传递给它的值并尝试 将其转换为指定的data_type。如果演员成功, TRY_CONVERT返回值作为指定的data_type; 如果发生错误,则返回null。 但是,如果您请求明确不转换 允许,然后TRY_CONVERT失败并显示错误。
答案 1 :(得分:0)
其中一行不是数字,你必须删除它们。找到它们:
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
转换为数字。