sql server 2000中已有的数据表中记录的删除!

wuxiaojie2006 2008-01-02 01:46:24
我做了一个网络系统,中间用到了sql 2000数据库作服务器,今天删除一行数据时,删除不了,出现死机的症状,不知道怎么回事,请名位帮助看看有没遇到类似情况!
...全文
163 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuxiaojie2006 2008-01-02
  • 打赏
  • 举报
回复
恩,试过了,不能删除,我干脆把它数据库还原下,是我设计时没考虑好,谢谢大家的帮助!
WhyAndAnswer 2008-01-02
  • 打赏
  • 举报
回复
你这个数据集的语句贴出来,还有什么错误信息?
wuxiaojie2006 2008-01-02
  • 打赏
  • 举报
回复
我是delphi中用有一个数据库中的字段,根据这个来删除!
WhyAndAnswer 2008-01-02
  • 打赏
  • 举报
回复
你是怎么删的,ADO/ADO.net来删的,还是用一条语句或其他的方法来做的,你没说清楚
wuxiaojie2006 2008-01-02
  • 打赏
  • 举报
回复
那要怎么办才好呀,大哥帮帮忙啊!
dawugui 2008-01-02
  • 打赏
  • 举报
回复
如果没有主键或索引,用查询分析器的语句也不行.
wuxiaojie2006 2008-01-02
  • 打赏
  • 举报
回复
谢谢各位,刚刚看了确实没有设置主键,而且有几条记录的有的字段内容相同,那这样只能用查询分析器的语句来删除了吗?
mars_heart 2008-01-02
  • 打赏
  • 举报
回复
是不是没有设置主键,在没有设置主键时,如果存在两条以上完全相同的记录,你选择删除一条记录时可能会出现你所遇到的那种状况。也可能是其他原因。你先查查你表里的记录是否像我说的那种情况
dawugui 2008-01-02
  • 打赏
  • 举报
回复
--查看锁信息

exec sp_who

----------------------------------------------
create table #t(req_spid int,obj_name sysname)

declare @s nvarchar(4000)
,@rid int,@dbname sysname,@id int,@objname sysname

declare tb cursor for
select distinct req_spid,dbname=db_name(rsc_dbid),rsc_objid
from master..syslockinfo where rsc_type in(4,5)
open tb
fetch next from tb into @rid,@dbname,@id
while @@fetch_status=0
begin
set @s='select @objname=name from ['+@dbname+']..sysobjects where id=@id'
exec sp_executesql @s,N'@objname sysname out,@id int',@objname out,@id
insert into #t values(@rid,@objname)
fetch next from tb into @rid,@dbname,@id
end
close tb
deallocate tb

select 进程id=a.req_spid
,数据库=db_name(rsc_dbid)
,类型=case rsc_type when 1 then 'NULL 资源(未使用)'
when 2 then '数据库'
when 3 then '文件'
when 4 then '索引'
when 5 then '表'
when 6 then '页'
when 7 then '键'
when 8 then '扩展盘区'
when 9 then 'RID(行 ID)'
when 10 then '应用程序'
end
,对象id=rsc_objid
,对象名=b.obj_name
,rsc_indid
from master..syslockinfo a left join #t b on a.req_spid=b.req_spid

go
drop table #t
-狙击手- 2008-01-02
  • 打赏
  • 举报
回复
--查看锁信息
create table #t(req_spid int,obj_name sysname)

declare @s nvarchar(4000)
,@rid int,@dbname sysname,@id int,@objname sysname

declare tb cursor for
select distinct req_spid,dbname=db_name(rsc_dbid),rsc_objid
from master..syslockinfo where rsc_type in(4,5)
open tb
fetch next from tb into @rid,@dbname,@id
while @@fetch_status=0
begin
set @s='select @objname=name from ['+@dbname+']..sysobjects where id=@id'
exec sp_executesql @s,N'@objname sysname out,@id int',@objname out,@id
insert into #t values(@rid,@objname)
fetch next from tb into @rid,@dbname,@id
end
close tb
deallocate tb

select 进程id=a.req_spid
,数据库=db_name(rsc_dbid)
,类型=case rsc_type when 1 then 'NULL 资源(未使用)'
when 2 then '数据库'
when 3 then '文件'
when 4 then '索引'
when 5 then '表'
when 6 then '页'
when 7 then '键'
when 8 then '扩展盘区'
when 9 then 'RID(行 ID)'
when 10 then '应用程序'
end
,对象id=rsc_objid
,对象名=b.obj_name
,rsc_indid
from master..syslockinfo a left join #t b on a.req_spid=b.req_spid

go
drop table #t
-狙击手- 2008-01-02
  • 打赏
  • 举报
回复
select spid, blocked, loginame, last_batch, status, cmd, hostname, program_name 
from sysprocesses
where spid in
( select blocked from sysprocesses where blocked <> 0 ) or (blocked <>0)
-狙击手- 2008-01-02
  • 打赏
  • 举报
回复
先看看哪个锁定了,要kill这个ID后才行
wuxiaojie2006 2008-01-02
  • 打赏
  • 举报
回复
没有"和其他表有关联,如外键约束等",我估计也是有进程锁定表,但是,如果这样的话怎么处理,我在企业管理器里面删除也不行呢!
中国风 2008-01-02
  • 打赏
  • 举报
回复
用事件探查器查原因,估计为有进程锁定表
dawugui 2008-01-02
  • 打赏
  • 举报
回复
是否该表和其他表有关联,如外键约束等?

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧