如何使用INSERT INTO SELECT将lookup_id从Table1复制到Table2

时间:2013-11-24 04:02:58

标签: sql sql-server

我是一名学习SQL Server的学生,并使用管理工作室来规范化以单个表开头的数据库。

我现在拥有包含ID,CategoryDe​​scription等的80,000行的Table1 ......以及许多重复的CateogoryDe​​scriptions。

Table2列出了使用SELECT DISTINCT创建的所有CategoryDe​​scriptions和DescriptionID列。它有大约100行。

我想将Table2中的DescriptionID值复制到表1中,以便我可以删除大的CategoryDe​​scription列并将其替换为查找表的链接。

以下内容生成预期数据(单列80,000 ID):

SELECT TEST.dbo.LU_ConNames.Con_ID
FROM TEST.dbo.LU_ConNames
JOIN TEST.dbo.MainTable
ON TEST.dbo.MainTable.CONCESSION = TEST.dbo.LU_ConNames.Con_Name

然而,当我添加INSERT INTO ...

INSERT INTO TEST.dbo.MainTable
SELECT TEST.dbo.LU_ConNames.Con_ID
FROM TEST.dbo.LU_ConNames
JOIN TEST.dbo.MainTable
ON TEST.dbo.MainTable.CONCESSION = TEST.dbo.LU_ConNames.Con_Name

我得到“列名或提供的值数与表定义不匹配。”为了澄清,MainTable中没有名为Con_ID的列。我想也许这就是问题,但是当我添加一个(并验证了相同的数据类型)时,我得到了同样的错误。

1 个答案:

答案 0 :(得分:0)

您不应该根据想要更新现有记录来插入新记录。

你可以这样做:

UPDATE TEST.dbo.MainTable
SET TEST.dbo.MainTable.Con_ID = C.Con_ID
FROM TEST.dbo.MainTable T
INNER JOIN TEST.dbo.LU_ConNames C
ON T.CONCESSION = C.Con_Name

关于该主题的一些阅读MSDN - UPDATE syntax