Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从内部联接和EXCEPT子句SQL插入时出错。转换varchar值时转换失败';错误:';到数据类型int_Sql_Sql Server_Inner Join_Except - Fatal编程技术网

从内部联接和EXCEPT子句SQL插入时出错。转换varchar值时转换失败';错误:';到数据类型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

我有三张桌子

桌面文档2 日志表 桌面文档1

我正在尝试从Tabledocs1插入Tabledocs2,但尚未插入Tabledocs2

LogTable是包含Tabledocs1和Tabledocs2列的中间表

案例转换未捕获/处理此错误。 将varchar值“Error:”转换为数据类型int时,转换失败

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