Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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
防止SQL表中出现重复值_Sql_Sql Server - Fatal编程技术网

防止SQL表中出现重复值

防止SQL表中出现重复值,sql,sql-server,Sql,Sql Server,我很难防止重复值插入到Microsoft SQL Server中的特定表中。我有一个每月导入数据的临时表,并从该表将所有电话号码插入电话号码表。电话号码表是一个包含1列的简单表,该列被设置为主键 第一次将数据从暂存表插入电话表时,一切正常,因为我可以在插入查询中使用distinct,以确保电话号码表中没有重复的数据。当我想再添加几个月的数据时,问题就出现了,我必须将新月份数据中的内容与电话号码表中的内容进行比较 这是我当前所在的位置,但此查询返回一个无法绑定多部分标识符“tbl\u PhoneN

我很难防止重复值插入到Microsoft SQL Server中的特定表中。我有一个每月导入数据的临时表,并从该表将所有电话号码插入电话号码表。电话号码表是一个包含1列的简单表,该列被设置为主键

第一次将数据从暂存表插入电话表时,一切正常,因为我可以在插入查询中使用
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