13 个解决方案
#1
有没有数据?
举例子是最好的。
举例子是最好的。
#2
insert into b(col1,col2,col3)
select col1,col2,col3 from mytable(what the AUTID not in b)
select col1,col2,col3 from mytable(what the AUTID not in b)
#3
insert into b(col1,col2,col3)
select col1,col2,col3 from mytable(what the AUTID not in b)
这是写的什么啊?
select col1,col2,col3 from mytable(what the AUTID not in b)
这是写的什么啊?
#4
楼主能不能举一个具体的例子?
#5
假设原来的表为mytable,autid有重复,需要保留一笔即可
建立一张具有和mytable相同结构的临时表mytemptable,单击鼠标右键,选择所有任务,选择管理索引,选择新建,起个索引名字,列就是autid,建立一个索引,勾选上唯一(unique),勾选上忽略重复的值,其他不要选择!然后把资料insert into到临时表,
此时SQL Server会返回如下提示:
服务器: 消息 3604,级别 16,状态 1,行 1
已忽略重复的键。
它表明在产品信息临时表Products_temp中不会有重复的行出现。
然后将原表mytable清空,并将临时表mytemptable中数据导入,最后删除临时表mytemptable。
这样就完成了对表中重复记录的删除。该方法的执行速度都是相当快的,而且因为几乎不用写语句,所以它也是很安全的。不过要依靠你的autid,万一你操作不当,没有关系,不要那么急着删除原来的表,这样不会出什么异常,错删除纪录!
建立一张具有和mytable相同结构的临时表mytemptable,单击鼠标右键,选择所有任务,选择管理索引,选择新建,起个索引名字,列就是autid,建立一个索引,勾选上唯一(unique),勾选上忽略重复的值,其他不要选择!然后把资料insert into到临时表,
此时SQL Server会返回如下提示:
服务器: 消息 3604,级别 16,状态 1,行 1
已忽略重复的键。
它表明在产品信息临时表Products_temp中不会有重复的行出现。
然后将原表mytable清空,并将临时表mytemptable中数据导入,最后删除临时表mytemptable。
这样就完成了对表中重复记录的删除。该方法的执行速度都是相当快的,而且因为几乎不用写语句,所以它也是很安全的。不过要依靠你的autid,万一你操作不当,没有关系,不要那么急着删除原来的表,这样不会出什么异常,错删除纪录!
#6
插入错误: 列名或所提供值的数目与表定义不匹配。
#7
insert into b(col1,col2,col3)
select col1,col2,col3 from mytable where col1+col2+col3 not in (select col1+col2+col3 from b) group by col1,col2,col3
select col1,col2,col3 from mytable where col1+col2+col3 not in (select col1+col2+col3 from b) group by col1,col2,col3
#8
服务器: 消息 3604,级别 16,状态 1,行 1
已忽略重复的键。
是有这个提示,不过没有重复的都插不入
已忽略重复的键。
是有这个提示,不过没有重复的都插不入
#9
服务器: 消息 2627,级别 14,状态 1,行 3
违反了 PRIMARY KEY 约束 'PK_SaveQty'。不能在对象 'SaveQty' 中插入重复键。
语句已终止。
违反了 PRIMARY KEY 约束 'PK_SaveQty'。不能在对象 'SaveQty' 中插入重复键。
语句已终止。
#10
是什么时候插入错误,是从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]
GO
CREATE TABLE [dbo].[a] (
[a_nam] [varchar] (10) COLLATE Chinese_*_Stroke_CI_AS NULL ,
[a_add] [varchar] (10) COLLATE Chinese_*_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]
GO
CREATE TABLE [dbo].[test_a] (
[a_nam] [varchar] (10) COLLATE Chinese_*_Stroke_CI_AS NOT NULL ,
[a_add] [varchar] (10) COLLATE Chinese_*_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即可!
注意:建立的表要一抹一样的结构,当然名字要不一样,呵呵
你建立的临时表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]
GO
CREATE TABLE [dbo].[a] (
[a_nam] [varchar] (10) COLLATE Chinese_*_Stroke_CI_AS NULL ,
[a_add] [varchar] (10) COLLATE Chinese_*_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]
GO
CREATE TABLE [dbo].[test_a] (
[a_nam] [varchar] (10) COLLATE Chinese_*_Stroke_CI_AS NOT NULL ,
[a_add] [varchar] (10) COLLATE Chinese_*_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即可!
注意:建立的表要一抹一样的结构,当然名字要不一样,呵呵
#11
刚刚看到,我知道了,你的临时表的索引,要建议唯一索引,勾选上忽略重复的值,其他不要选上,
其他不要选上---这个你肯定没有做好,否则怎么会呢?
其他不要选上---这个你肯定没有做好,否则怎么会呢?
#12
现在可以了,,一时可以一时不可以,不稳定
#13
楼上上的妹妹好强哦
#1
有没有数据?
举例子是最好的。
举例子是最好的。
#2
insert into b(col1,col2,col3)
select col1,col2,col3 from mytable(what the AUTID not in b)
select col1,col2,col3 from mytable(what the AUTID not in b)
#3
insert into b(col1,col2,col3)
select col1,col2,col3 from mytable(what the AUTID not in b)
这是写的什么啊?
select col1,col2,col3 from mytable(what the AUTID not in b)
这是写的什么啊?
#4
楼主能不能举一个具体的例子?
#5
假设原来的表为mytable,autid有重复,需要保留一笔即可
建立一张具有和mytable相同结构的临时表mytemptable,单击鼠标右键,选择所有任务,选择管理索引,选择新建,起个索引名字,列就是autid,建立一个索引,勾选上唯一(unique),勾选上忽略重复的值,其他不要选择!然后把资料insert into到临时表,
此时SQL Server会返回如下提示:
服务器: 消息 3604,级别 16,状态 1,行 1
已忽略重复的键。
它表明在产品信息临时表Products_temp中不会有重复的行出现。
然后将原表mytable清空,并将临时表mytemptable中数据导入,最后删除临时表mytemptable。
这样就完成了对表中重复记录的删除。该方法的执行速度都是相当快的,而且因为几乎不用写语句,所以它也是很安全的。不过要依靠你的autid,万一你操作不当,没有关系,不要那么急着删除原来的表,这样不会出什么异常,错删除纪录!
建立一张具有和mytable相同结构的临时表mytemptable,单击鼠标右键,选择所有任务,选择管理索引,选择新建,起个索引名字,列就是autid,建立一个索引,勾选上唯一(unique),勾选上忽略重复的值,其他不要选择!然后把资料insert into到临时表,
此时SQL Server会返回如下提示:
服务器: 消息 3604,级别 16,状态 1,行 1
已忽略重复的键。
它表明在产品信息临时表Products_temp中不会有重复的行出现。
然后将原表mytable清空,并将临时表mytemptable中数据导入,最后删除临时表mytemptable。
这样就完成了对表中重复记录的删除。该方法的执行速度都是相当快的,而且因为几乎不用写语句,所以它也是很安全的。不过要依靠你的autid,万一你操作不当,没有关系,不要那么急着删除原来的表,这样不会出什么异常,错删除纪录!
#6
插入错误: 列名或所提供值的数目与表定义不匹配。
#7
insert into b(col1,col2,col3)
select col1,col2,col3 from mytable where col1+col2+col3 not in (select col1+col2+col3 from b) group by col1,col2,col3
select col1,col2,col3 from mytable where col1+col2+col3 not in (select col1+col2+col3 from b) group by col1,col2,col3
#8
服务器: 消息 3604,级别 16,状态 1,行 1
已忽略重复的键。
是有这个提示,不过没有重复的都插不入
已忽略重复的键。
是有这个提示,不过没有重复的都插不入
#9
服务器: 消息 2627,级别 14,状态 1,行 3
违反了 PRIMARY KEY 约束 'PK_SaveQty'。不能在对象 'SaveQty' 中插入重复键。
语句已终止。
违反了 PRIMARY KEY 约束 'PK_SaveQty'。不能在对象 'SaveQty' 中插入重复键。
语句已终止。
#10
是什么时候插入错误,是从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]
GO
CREATE TABLE [dbo].[a] (
[a_nam] [varchar] (10) COLLATE Chinese_*_Stroke_CI_AS NULL ,
[a_add] [varchar] (10) COLLATE Chinese_*_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]
GO
CREATE TABLE [dbo].[test_a] (
[a_nam] [varchar] (10) COLLATE Chinese_*_Stroke_CI_AS NOT NULL ,
[a_add] [varchar] (10) COLLATE Chinese_*_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即可!
注意:建立的表要一抹一样的结构,当然名字要不一样,呵呵
你建立的临时表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]
GO
CREATE TABLE [dbo].[a] (
[a_nam] [varchar] (10) COLLATE Chinese_*_Stroke_CI_AS NULL ,
[a_add] [varchar] (10) COLLATE Chinese_*_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]
GO
CREATE TABLE [dbo].[test_a] (
[a_nam] [varchar] (10) COLLATE Chinese_*_Stroke_CI_AS NOT NULL ,
[a_add] [varchar] (10) COLLATE Chinese_*_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即可!
注意:建立的表要一抹一样的结构,当然名字要不一样,呵呵
#11
刚刚看到,我知道了,你的临时表的索引,要建议唯一索引,勾选上忽略重复的值,其他不要选上,
其他不要选上---这个你肯定没有做好,否则怎么会呢?
其他不要选上---这个你肯定没有做好,否则怎么会呢?
#12
现在可以了,,一时可以一时不可以,不稳定
#13
楼上上的妹妹好强哦