防止SQL表中出现重复值
我很难防止重复值插入到Microsoft SQL Server中的特定表中。我有一个每月导入数据的临时表,并从该表将所有电话号码插入电话号码表。电话号码表是一个包含1列的简单表,该列被设置为主键 第一次将数据从暂存表插入电话表时,一切正常,因为我可以在插入查询中使用防止SQL表中出现重复值,sql,sql-server,Sql,Sql Server,我很难防止重复值插入到Microsoft SQL Server中的特定表中。我有一个每月导入数据的临时表,并从该表将所有电话号码插入电话号码表。电话号码表是一个包含1列的简单表,该列被设置为主键 第一次将数据从暂存表插入电话表时,一切正常,因为我可以在插入查询中使用distinct,以确保电话号码表中没有重复的数据。当我想再添加几个月的数据时,问题就出现了,我必须将新月份数据中的内容与电话号码表中的内容进行比较 这是我当前所在的位置,但此查询返回一个无法绑定多部分标识符“tbl\u PhoneN
distinct
,以确保电话号码表中没有重复的数据。当我想再添加几个月的数据时,问题就出现了,我必须将新月份数据中的内容与电话号码表中的内容进行比较
这是我当前所在的位置,但此查询返回一个无法绑定多部分标识符“tbl\u PhoneNumber.MTN”。
错误
INSERT INTO tbl_PhoneNumber( MTN )
SELECT distinct [dbo].[tbl_Raw_Data].[Wireless Number]
FROM [dbo].[tbl_Raw_Data]
Where tbl_PhoneNumber.[MTN] <>[tbl_Raw_Data].[Wireless Number]
插入tbl\U电话号码(MTN)
选择不同的[dbo].[tbl\U原始数据].[Wireless Number]
来自[dbo]。[tbl_原始数据]
其中tbl_电话号码。[MTN][tbl_原始数据].[无线号码]
希望我没有让这听起来比它是什么更让人困惑。比较两个表并只插入唯一值的最佳方法是什么?只要确保表中有一个名为
MTN
的列,它就可以正常工作
INSERT INTO tbl_PhoneNumber( MTN )
SELECT distinct [Wireless Number]
FROM [dbo].[tbl_Raw_Data]
Where NOT EXISTS(SELECT 1
FROM tbl_PhoneNumber
WHERE tbl_PhoneNumber.[MTN] = [tbl_Raw_Data].[Wireless Number])
这是另一种方法
insert into tbl_PhoneNumber (mtn)
select distinct Wireless_Number
from tbl_Raw_data
except
select mtn
from tbl_PhoneNumber
这是完美的,我会接受它作为答案,只要它让我。不过我确实有一些问题。
select
之后的1
的作用是什么?我之前尝试过类似的方法,但没有包括1。实际上它不必是1
,它可以是任何东西,甚至SELECT NULL
也可以正常工作,实际上exist操作符只查找任何东西,如果从子查询返回任何内容,其中where
条件的计算结果为true,则对于外部查询中的特定行,整个表达式的计算结果为true