/*========================================================================*/
-- 触发器功能:当单据删除时,做相应的判断
/*------------------------------------------------------------------------*/
-- 描述:1、如果单据被审核,则不允许被删除
/*------------------------------------------------------------------------*/
-- 作者: XXX 日期: 2004-9-6
/*========================================================================*/
CREATE TRIGGER [TR_ECSBillList_BDV] ON dbo.T04_ECSBillList--●●●
FOR DELETE
AS
Declare @ID int,
@BillCode varchar(20),
@Audit bit,
@ECSConfirm bit Declare Curs Cursor For
SELECT In_ECSID FROM Deleted--●●●
Open Curs
Fetch Curs Into @ID While(@@Fetch_status = 0)
Begin
SELECT @Audit = b.Bi_Audit,
@ECSConfirm = b.Bi_ECSConfirm,
@BillCode = b.Va_ESCCode--●●●
FROM Deleted a INNER JOIN
T04_ECSBill b --●●●
ON a.In_ECSID = b.In_ECSID --●●●
WHERE a.In_ECSID = @ID --●●●
AND b.Bi_IsVoid = 0
IF @ECSConfirm = 1
Begin
Close Curs
Deallocate Curs
RAISERROR( '单据[%s]已经执行入/出库,不能删除其明细。', 16, 1,@BillCode)
ROLLBACK TRANSACTION
Return
End
IF @Audit = 1
Begin
Close Curs
Deallocate Curs
RAISERROR( '单据[%s]已经被审核,不能删除其明细。', 16, 1,@BillCode)
ROLLBACK TRANSACTION
Return
End
Fetch Curs into @ID
End
Close Curs
Deallocate Curs
-- 触发器功能:当单据删除时,做相应的判断
/*------------------------------------------------------------------------*/
-- 描述:1、如果单据被审核,则不允许被删除
/*------------------------------------------------------------------------*/
-- 作者: XXX 日期: 2004-9-6
/*========================================================================*/
CREATE TRIGGER [TR_ECSBillList_BDV] ON dbo.T04_ECSBillList--●●●
FOR DELETE
AS
Declare @ID int,
@BillCode varchar(20),
@Audit bit,
@ECSConfirm bit Declare Curs Cursor For
SELECT In_ECSID FROM Deleted--●●●
Open Curs
Fetch Curs Into @ID While(@@Fetch_status = 0)
Begin
SELECT @Audit = b.Bi_Audit,
@ECSConfirm = b.Bi_ECSConfirm,
@BillCode = b.Va_ESCCode--●●●
FROM Deleted a INNER JOIN
T04_ECSBill b --●●●
ON a.In_ECSID = b.In_ECSID --●●●
WHERE a.In_ECSID = @ID --●●●
AND b.Bi_IsVoid = 0
IF @ECSConfirm = 1
Begin
Close Curs
Deallocate Curs
RAISERROR( '单据[%s]已经执行入/出库,不能删除其明细。', 16, 1,@BillCode)
ROLLBACK TRANSACTION
Return
End
IF @Audit = 1
Begin
Close Curs
Deallocate Curs
RAISERROR( '单据[%s]已经被审核,不能删除其明细。', 16, 1,@BillCode)
ROLLBACK TRANSACTION
Return
End
Fetch Curs into @ID
End
Close Curs
Deallocate Curs
解决方案 »
- 一个小问题 存储过程里面 如何取 第2天的 12:00:00点?
- 求一个SQL语句
- 局域网里的SQL数据库,怎么让所有人都能用?
- com.microsoft.sqlserver.jdbc.SQLServerException: 到主机 的 TCP/IP 连接失败。
- 大家帮我看看我的语句有错误吗?
- 网页服务器连不上数据服务器了,大家救命啊!!
- select * from table1与exec('select * from table1)的区别及其他(在线等)
- 高手们帮我看看这个存储过程有什么问题,怎么没有返回值呢?
- 数据库怎样才能学好?
- 如何实现向ACCESS数据库中插入记录
- 速答,convert
- 一段时间不写就忘了——请问这个关于两个表的UPDATE语句怎么写
帮你测一下!!
------------------
表结构和关系不会有问题,可以看得出,这个触发器很简单的。问题好像出现在我在触发器做的标记符号“●●● ”,我刚才试了一下:将第一行“...ON dbo.T04_ECSBillList--●●● ”修改成“...ON dbo.T04_ECSBillList --●●● ”后再选择“应用”就没问题了,注意中间过了个空格。基本上问题算是解决了,但我还是不知道为什么会出现这种现象,我其它的触发器也有无空格写法的,也没出现如题这样的提示呀?请大侠执教!!
我在安键的clicked事件中写下如下代码 可无法通过编译 请帮忙看一下cb_inquiry clicked;
datetime birthday1;
//所有显示清空
sle_name.text=""
sle_gender.text=""
sle_nativeplace.text=""
em_birthday.text=""
sle_department.text=""
sle_class.text=""
sle_major.text=""
sle_height.text=""
sle_weight.text=""
mle_resume.text=""
//sql查询,将各个字段值赋给各个显示控件
select name,gender,nativeplace,birthday,department,class,
major,height,weight,resume
into :sle_name.text,:sle_gender.text,:sle_nativeplace.text,
:birthday1,:sle_department.text,:sle_class.text,
:sle_major.text,:sle_height.text,:sle_weight.text,:mle_resume.text
from student
where number=:sle_number.text
using sqlca;if sle_name.text="" then
messagebox("提示: "," 没有找到符合条件的记录,请重新输入学号!")
return
end ifem_birthday.text=Mid(string(birthday1),1,10)
sle_height.text=sle_height.text+"厘米"
sle_weight.text=sle_weight.text+"公斤"
end event提示错误是:
Error C0031:Syntax error
CREATE TRIGGER [TR_ECSBillList_BDV] ON dbo.T04_ECSBillList
FOR DELETE
AS
if exists(SELECT * FROM Deleted WHERE Bi_IsVoid=0 AND Bi_ECSConfirm=1)
Begin
ROLLBACK TRANSACTION
RAISERROR( '单据[%s]已经执行入/出库,不能删除其明细。', 16, 1)
return
End
if exists(SELECT * FROM Deleted WHERE Bi_IsVoid=0 AND Bi_Audit=1)
Begin
ROLLBACK TRANSACTION
RAISERROR( '单据[%s]已经被审核,不能删除其明细。', 16, 1)
Return
End
我在安键的clicked事件中写下如下代码 可无法通过编译 请帮忙看一下
------------------------------------------------------------------
晕了~~~~
是不是PB的脚本?你表里的number是什么类型的?还有,建议你定义变量来处理取值的问题,这样写很不规范的。
至于如何提问,直接在你想发问题的栏目上选择“提问”就可以了。
触发器写得过于复杂,没必要用游标
---------------------------------
这个表是入出库的明细表,用游标的目的是每次更新或者删除的条数是不定的,而且表中的单据类型是不一样的,明细表和主表之间的关联是“主表的ID号”,而且主和子是一对多的关系,你这样一些不全都OVER了??
CREATE TRIGGER [TR_ECSBillList_BDV] ON dbo.T04_ECSBillList
FOR DELETE
AS
if exists(SELECT * FROM Deleted a INNER JOIN T04_ECSBill b
ON a.In_ECSID = b.In_ECSID WHERE a.In_ECSID = a.In_ECSID
AND b.Bi_IsVoid = 0 and b.Bi_ECSConfirm=1)
Begin
ROLLBACK TRANSACTION
RAISERROR( '单据[%s]已经执行入/出库,不能删除其明细。', 16, 1)
Return
End
if exists(SELECT * FROM Deleted a INNER JOIN T04_ECSBill b
ON a.In_ECSID = b.In_ECSID WHERE a.In_ECSID = a.In_ECSID
AND b.Bi_IsVoid = 0 and b.Bi_Audit=1)
Begin
RAISERROR( '单据[%s]已经被审核,不能删除其明细。', 16, 1)
ROLLBACK TRANSACTION
Return
End
您上面写的触发器的我看了,是一种做法,但是我的触发器也没有问题,只是用了游标而已。我今天提问的目的不是触发器该怎么写,是想请教大家 我如题的问题。我在4楼已经写出了我针对今天的问题的解决办法,可是我不知道出现这种情况的原因是什么?其它表的触发器也有这么写的,在保存时也没有出现问题。我还是想知道出现如题的现象的根本原因是什么。谢谢。
----------------------------------
但是注释存在了也没出什么问题。不知道SQL Server抽的哪门子风?
游标确实低效,接受您的建议!谢谢。结了,知道咋处理就行了,再继续讨论没啥价值了。