首页 > 解决方案 > 如何比较不同的数据库表列并在 SQL Server 中添加?

问题描述

我有两个不同的数据库,同一列。我想通过比较表之间的数字并具有相同的数字来将图片从旧数据库复制到新数据库。

例如:

数据库名 1: StudentInformation, 表名:Student

StudentID     Image
---------------------
  123         1.png    
  142         2.png    
  175         3.png    
  475         4.png

数据库名 2:,StudentInformation2表名:NewStudent

 StudentID       Image
 --------------------------
  145            a14.png    
  196            7.png    
  175            5.png    
  875            9.png    
  475            12.png 

这两个表有共同的 ID(ID=175 和 ID=475)

结果我想得到这张表:

StudentID    Image
-----------------------
  145        a14.png    
  196          7.png    
  175          3.png    
  875          9.png    
  475          4.png

我写了这个查询:

INSERT INTO NEW STUDENT 
    SELECT STUDENT ID 
    FROM STUDENT 
    WHERE STUDENT INFORMATION1.STUDENT ID = STUDENT INFORMATION2.STUDENTID

但它不运行。如何编写 SQL 通过比较旧表和新表的 ID 值来将图像添加到公共 ID 列?

标签: sqlsql-server

解决方案


目前尚不清楚-第二个样本中的值是否真的是数据中的那个字符,或者它是否只是代表NULL. 在这个答案中,我假设后者。


首先要了解的是,不能在表名和列名中留下空格。最好不要在表名和列名中使用空格,但如果必须,至少必须将这些名称括在方括号中,即:[NEW STUDENT].

接下来,您已经拥有 StudentID 值 175 和 475 的数据,因此这根本不是 INSERT 命令。这将是一个UPDATE命令。

现在,假设数据库在同一台服务器上或链接服务器已经存在,并且您的连接对两个数据库都具有所需的权限,您将必须完全限定所有内容,包括架构(几乎总是dbo)。

把所有这些放在一起,你会得到:

UPDATE n /* n = new, o = old */
SET n.Image = o.Image
FROM StudentInformation2.dbo.NewStudent n
INNER JOIN StudentInformation.dbo.Student o ON o.StudentID = n.StudentID
-- removed WHERE clause based on a comment to the question. The o
--WHERE n.Image IS NULL

推荐阅读