是什么时候插入错误,是从mytable插入到mytemptable,还是后来从mytemptable插入到mytable 你建立的临时表mytemptable要和mytable的字段个数一样,位置一样,总之要相同的表!看我的测试例子: 建立原来的表a: if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[a]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [dbo].[a] GOCREATE TABLE [dbo].[a] ( [a_nam] [varchar] (10) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL , [a_add] [varchar] (10) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ) ON [PRIMARY] GO 插入数据为: /* a_nam a_add ---------- ---------- 1 aa 3 bb 2 bb 1 aa 3 bb(5 row(s) affected) */然后建立一个和a相同结构的表: if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[test_a]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [dbo].[test_a] GOCREATE TABLE [dbo].[test_a] ( [a_nam] [varchar] (10) COLLATE Chinese_Taiwan_Stroke_CI_AS NOT NULL , [a_add] [varchar] (10) COLLATE Chinese_Taiwan_Stroke_CI_AS NOT NULL ) ON [PRIMARY] GO --这个是我生成的脚本,我上面说的“列就是autid,建立一个索引,勾选上唯一(unique),勾选上忽略重复的值,其他不要选择!” 要用企业管理器自己设计!做好后:执行 insert into test_a select * from a/* Server: Msg 3604, Level 16, State 1, Line 1 Duplicate key was ignored. --意思就是已忽略重复的键。 */然后,看到test_a的数据为: /* a_nam a_add ---------- ---------- 1 aa---重复的已经没有 2 bb 3 bb(3 row(s) affected)*/然后删除a表的数据:delete from a 然后把test_a的数据导回来:insert into a select * from test_a即可!注意:建立的表要一抹一样的结构,当然名字要不一样,呵呵
select col1,col2,col3 from mytable(what the AUTID not in b)
这是写的什么啊?
建立一张具有和mytable相同结构的临时表mytemptable,单击鼠标右键,选择所有任务,选择管理索引,选择新建,起个索引名字,列就是autid,建立一个索引,勾选上唯一(unique),勾选上忽略重复的值,其他不要选择!然后把资料insert into到临时表,
此时SQL Server会返回如下提示:
服务器: 消息 3604,级别 16,状态 1,行 1
已忽略重复的键。
它表明在产品信息临时表Products_temp中不会有重复的行出现。然后将原表mytable清空,并将临时表mytemptable中数据导入,最后删除临时表mytemptable。
这样就完成了对表中重复记录的删除。该方法的执行速度都是相当快的,而且因为几乎不用写语句,所以它也是很安全的。不过要依靠你的autid,万一你操作不当,没有关系,不要那么急着删除原来的表,这样不会出什么异常,错删除纪录!
select col1,col2,col3 from mytable where col1+col2+col3 not in (select col1+col2+col3 from b) group by col1,col2,col3
违反了 PRIMARY KEY 约束 'PK_SaveQty'。不能在对象 'SaveQty' 中插入重复键。
语句已终止。
你建立的临时表mytemptable要和mytable的字段个数一样,位置一样,总之要相同的表!看我的测试例子:
建立原来的表a:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[a]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[a]
GOCREATE TABLE [dbo].[a] (
[a_nam] [varchar] (10) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
[a_add] [varchar] (10) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL
) ON [PRIMARY]
GO
插入数据为:
/*
a_nam a_add
---------- ----------
1 aa
3 bb
2 bb
1 aa
3 bb(5 row(s) affected)
*/然后建立一个和a相同结构的表:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[test_a]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[test_a]
GOCREATE TABLE [dbo].[test_a] (
[a_nam] [varchar] (10) COLLATE Chinese_Taiwan_Stroke_CI_AS NOT NULL ,
[a_add] [varchar] (10) COLLATE Chinese_Taiwan_Stroke_CI_AS NOT NULL
) ON [PRIMARY]
GO
--这个是我生成的脚本,我上面说的“列就是autid,建立一个索引,勾选上唯一(unique),勾选上忽略重复的值,其他不要选择!” 要用企业管理器自己设计!做好后:执行
insert into test_a
select * from a/*
Server: Msg 3604, Level 16, State 1, Line 1
Duplicate key was ignored.
--意思就是已忽略重复的键。
*/然后,看到test_a的数据为:
/*
a_nam a_add
---------- ----------
1 aa---重复的已经没有
2 bb
3 bb(3 row(s) affected)*/然后删除a表的数据:delete from a
然后把test_a的数据导回来:insert into a select * from test_a即可!注意:建立的表要一抹一样的结构,当然名字要不一样,呵呵