我有一个系统,系统内有两个表,采用adoquery连接,两个表为主从表a,b 表a,b内
用一个相同的字段联系,a表内有一个触发器,当程序删除a表的数据时,删除b表内相关的数据,可是执行是报错,错误:无法定位记录,记录在最后读取后改变,或更新影响过多行,用odbc 连接则没有问题,sql server 查询分析器内执行也没有问题
触发器代码:
create triiger trii1 on a
as
declare @bneno varchar(10)
select @bneno=bneno
from a
delete from b
where bneno=@bneno
go
用一个相同的字段联系,a表内有一个触发器,当程序删除a表的数据时,删除b表内相关的数据,可是执行是报错,错误:无法定位记录,记录在最后读取后改变,或更新影响过多行,用odbc 连接则没有问题,sql server 查询分析器内执行也没有问题
触发器代码:
create triiger trii1 on a
as
declare @bneno varchar(10)
select @bneno=bneno
from a
delete from b
where bneno=@bneno
go
解决方案 »
- 暂时离开一个月,散分啦,回来结贴
- 设置和读取格子里面的内容,方便得选择某一行,用什么控件比较好
- 大家好 能不能帮我介绍几本delphi教程的好书或好的delphi教程网站?谢谢
- 跟Delphi和 SQL Server 有关的问题。。。急!!在线等待!多谢了!
- 能不能给个用 代码 详细控制 WORD 中 表格 每个 单元格 格式的例子?分数66分,回答完后给
- sql和delphi的问题,令人头痛!!!
- 请教高手,关于数据库的问题
- sender的小问题,HELP!
- 在delphi下获取的日期年份为2030年,问如何解决
- delphi的小問題....
- 程序员开发数据库必备工具.数据库工具2004 导出数据结构文档,生成表sql语句等
- 这两中创建窗体的方式有什么区别呢?
二,如果确实有写的话:
1.你的触发器出错是那句select 引起的而导致Delete出错.
2.你可以这样写:
你可以A表中定义一个删除型触发器,
create triiger trii1 on a for delete
as
declare @bneno varchar(10)
select @bneno=bneno
from deleted
delete from b
where bneno=@bneno
解决问题就是要找到简洁而高效的办法
触发器用多了,加重数据库系统的负荷,不太好,注意我不是说不用,要到用的时候:)
create triiger trii1 on a for delete
as
declare @bneno varchar(10)
select @bneno=bneno
from deleted
delete from b
where bneno=@bneno
as
Delete from B
From B Inner Join Deleted on deleted.bneno = B.bneno
GO用你的做法不管是用ADO还是用ODBC,删除超过一行时就会有问题!