关键字相同的几个语句如何插入

bluemind 2003-12-14 10:58:03
关键字相同的几个语句插入时会报错,
如何写insert语句使插入时只插入第一条记录.
...全文
32 16 打赏 收藏 举报
写回复
16 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
bluemind 2003-12-18
Declare @wno nchar(50),@type integer,@proficiency nchar(20)
Declare cur cursor
for select distinct [Employee Number],[Language Type],Proficiency from [Speciality$]
open cur
-- on error resume next
fetch next from cur into @wno,@type,@proficiency
begin tran
while @@FETCH_STATUS=0

begin
Insert Into bqp..language (wno , type , proficiency) Values (@wno , @type , @proficiency)

FETCH NEXT FROM cur into @wno,@type,@proficiency
print @@error
print @@rowcount
IF @@error != 0 OR @@rowcount != 1
begin
print @@error
rollback tran
--close cur
--DEALLOCATE curselect *
--return
end
end

close cur
commit tran
DEALLOCATE cur

已经搞定了,你们给答案真是模糊啊
  • 打赏
  • 举报
回复
bluemind 2003-12-16
Declare @wno nchar(50),@type integer,@proficiency nchar(20)

Declare cur cursor
for select distinct * from #f
for read only

open cur

fetch next from cur into @wno,@type,@proficiency
while @@error=0

begin
Insert Into bqp..language (wno , type , proficiency) Values (@wno , @type , @proficiency)
end
if (@@error<>0)
rollback tran



FETCH NEXT FROM cur
into @wno,@type,@proficiency

close cur
deallocate cur

以上是我写的游标
  • 打赏
  • 举报
回复
bluemind 2003-12-16
可是我这样写了,还是会报关键值重复
  • 打赏
  • 举报
回复
1ssp 2003-12-16
出错处理:当出错时 rollback tran 回滚
  • 打赏
  • 举报
回复
bluemind 2003-12-16
to lssp:
游标很简单,还是使用游标吧。

用游标出错处理如何写了,因为现在它还是会包错啊
  • 打赏
  • 举报
回复
milesma 2003-12-15
不明白楼主什么意思.我的理解是:
insert into tableName(field1)
select field1
from ....
其中field1是主键,但检索出来的结果field1不唯一。那么你可以用select distinct替换select。
  • 打赏
  • 举报
回复
bluemind 2003-12-15
举例说明一下:
table结构如下:(education)
wno,major,schoolname,begindate,enddate,
其中wno,major & begindate为关键字
现在我需要把一临时table中的4条记录插入到education中
wno major schoolname begindate enddate
'0209402','computer','苏州大学',19970901, 20010701
'0209402','computer','东北大学',19970901, 20020701
'0209402','english', '东北大学',20010901, 20030701
'0209407','chinese', '东北大学',20010901, 20030701
其中1,2的关键字相同,不知如何处理.

to 这样的话,可以用异常处理来实现呀,如果是关键字重覆了,就不再insert
如何实现啊.
  • 打赏
  • 举报
回复
zjcxc 元老 2003-12-15
逐个插入就可以了.
  • 打赏
  • 举报
回复
victorycyz 2003-12-15
关键字相同是什么意思?


insert只插入第一条:

insert into table2
select top 1 *
from table1
where ...
  • 打赏
  • 举报
回复
ivy_live521 2003-12-15
加个自增列进行区分

然后再插入
  • 打赏
  • 举报
回复
1ssp 2003-12-15
游标很简单,还是使用游标吧。
  • 打赏
  • 举报
回复
Rotaxe 2003-12-15
如果在存储过程中直接插入就可以了,关键字重覆了,SQL Server会自动会滚当前语句,后面的继续执行。
在前台的话需要加入错误异常处理
  • 打赏
  • 举报
回复
milesma 2003-12-15
to zjcxc(邹建)
您的意思是在存储过程中用游标定位纪录,然后逐个插入吗?有没有办法一条sql语句实现?
关注中...
  • 打赏
  • 举报
回复
laodeng72586 2003-12-15
这样的话,可以用异常处理来实现呀,如果是关键字重覆了,就不再insert呀
  • 打赏
  • 举报
回复
yu3227 2003-12-14
怎么没人会啊
  • 打赏
  • 举报
回复
bluemind 2003-12-14
XDJM帮忙啊,我在线等待
  • 打赏
  • 举报
回复
发帖
MS-SQL Server

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
帖子事件
创建了帖子
2003-12-14 10:58
社区公告
暂无公告