从内部联接和EXCEPT子句SQL插入时出错。转换varchar值时转换失败';错误:';到数据类型int
我有三张桌子 桌面文档2 日志表 桌面文档1 我正在尝试从Tabledocs1插入Tabledocs2,但尚未插入Tabledocs2 LogTable是包含Tabledocs1和Tabledocs2列的中间表 案例转换未捕获/处理此错误。 将varchar值“Error:”转换为数据类型int时,转换失败从内部联接和EXCEPT子句SQL插入时出错。转换varchar值时转换失败';错误:';到数据类型int,sql,sql-server,inner-join,except,Sql,Sql Server,Inner Join,Except,我有三张桌子 桌面文档2 日志表 桌面文档1 我正在尝试从Tabledocs1插入Tabledocs2,但尚未插入Tabledocs2 LogTable是包含Tabledocs1和Tabledocs2列的中间表 案例转换未捕获/处理此错误。 将varchar值“Error:”转换为数据类型int时,转换失败 isnumeric()。在sql server 2012+中,请改用尝试转换()。对于失败的转换,它将返回null,而不是错误 print 'INSERTING FROM Tabledocs
isnumeric()。在sql server 2012+中,请改用尝试转换()。对于失败的转换,它将返回null
,而不是错误
print 'INSERTING FROM Tabledocs2 INTO Tabledocs1'
insert into Tabledocs1 (
Log_id
, document_name
, document_icon
, document_body
)
select
coalesce(try_convert(int,ID),0)
, document_name
, document_icon
, document_body
from LogTable
inner join Tabledocs1
on LogTable.detail_ID = Tabledocs1.detail_ID
and log_ID = @LogID
except
select
Log_id
, document_name
, document_icon
, document_body
from Tabledocs2
也许你应该换个方向
INSERT INTO Tabledocs1 (Log_id, document_name , document_icon , document_body )
SELECT ID, document_name , document_icon , document_body
FROM LogTable INNER JOIN
Tabledocs1
ON LogTable.detail_ID = Tabledocs1.detail_ID
WHERE log_ID = @LogID
EXCEPT
(SELECT CAST(Log_id as VARCHAR(12)), document_name , document_icon , document_body
FROM Tabledocs2
);--To Avoid duplicates
您希望转换为数字格式的原因可能有很多,例如前导零。但是,12个字符对于一个整数来说太长了,因此您仍然需要NUMERIC()
或BIGINT
。用您正在使用的数据库标记您的问题。Log\u id是整数,document\u name是varchar(20),document\u图标,document\u body是二进制的。我将尝试使用NUMERIC()
INSERT INTO Tabledocs1 (Log_id, document_name , document_icon , document_body )
SELECT ID, document_name , document_icon , document_body
FROM LogTable INNER JOIN
Tabledocs1
ON LogTable.detail_ID = Tabledocs1.detail_ID
WHERE log_ID = @LogID
EXCEPT
(SELECT CAST(Log_id as VARCHAR(12)), document_name , document_icon , document_body
FROM Tabledocs2
);--To Avoid duplicates