首页 > 解决方案 > 为什么 SQL 中的“insert into select”语句作为新行插入而不正确插入?

问题描述

我有表 1。

在此处输入图像描述

我有另一个带有以下列的空表 2。

在此处输入图像描述

我想通过从表 1 中选择来插入表 2 - 所以我将查询编写为:

insert into table2(employee,id,zone,url) 
select employee, id, zone, concat('https://',employee,'.com/',id,'?',zone) 
from table1

现在我的表 2 看起来像这样,

在此处输入图像描述

现在对于authcode列,我执行以下操作并将其插入到 table2 中。

insert into table2(authcode) 
SELECT CONVERT(VARCHAR(10),HASHBYTES('MD5', substring(URL,8,100)),2) 
from table2.

但是插入的发生方式不同,就像这样作为一个完整的新行集。

在此处输入图像描述

有人可以帮我将最后一列插入相应的行而不是创建一个新行吗?

标签: sqlsql-serverdatabasesql-insert

解决方案


您应该做的是更新表以填充列authcode,但您可以在插入行时一步完成所有操作:

insert into table2(employee,id,zone,url, authcode) 
select 
  employee, 
  id, 
  zone, 
  concat('https://',employee,'.com/',id,'?',zone),
  CONVERT(VARCHAR(10),HASHBYTES('MD5', substring(concat('https://',employee,'.com/',id,'?',zone),8,100)),2) 
from table1

或者如果你想更新:

update table2
set authcode = CONVERT(VARCHAR(10),HASHBYTES('MD5', substring(URL,8,100)),2) 
where authcode is null 

推荐阅读