请教个很棘手的“触发器”问题
现象:
SLQ触发器判断没问题,但ASP程序中对触发器返回的@@rowcount信息处理错误;就是错误值有时候读不出来,下面是一个测试例子,字段检测是JCKSPZE,条件是JCKSPZE必须<100
能读出错误时的触发器:
CREATE TRIGGER [TRI_HGHYHGJCK] ON [dbo].[usrHGHYHGJCK]
FOR INSERT, UPDATE
AS
declare @JCKSPZE FLOAT
IF EXISTS (SELECT * FROM INSERTED WHERE JCKSPZE>100 AND GKBZ=1)
BEGIN
RAISERROR('JCKSPZE ERROR!',16,1)
ROLLBACK TRAN
RETURN
END
UPDATE usrHGHYHGJCK SET ZTGJ='中国' from inserted a,usrHGHYHGJCK b where a.ID=b.ID and a.ZTGJ<>'中国'
不能读出错误时的写法:
CREATE TRIGGER [TRI_HGHYHGJCK] ON [dbo].[usrHGHYHGJCK]
FOR INSERT, UPDATE
AS
declare @JCKSPZE FLOAT
UPDATE usrHGHYHGJCK SET ZTGJ='中国' from inserted a,usrHGHYHGJCK b where a.ID=b.ID and a.ZTGJ<>'中国'
IF EXISTS (SELECT * FROM INSERTED WHERE JCKSPZE>100 AND GKBZ=1)
BEGIN
RAISERROR('JCKSPZE ERROR!',16,1)
ROLLBACK TRAN
RETURN
END
程序里的触发器判断语句:
if isSave="True" then
'如果是在本页面执行保存操作,则:
'0、执行数据验证程序(检查字段间关系)(在公开标志为0时,不检查)
strCondition=trim(rsTable("Validation1"))
'1、执行数据验证程序(验证:唯一字段)(对于SCBZ=1的,不检查)
'.............
' Response.Write strUnique
arrCon=Split(strUnique,";",-1,1)
for i=0 to UBound(arrCon)-1
strSql="Select ID From " & strTable & " Where " & arrCon(i) & " And SCBZ=0 And ID<>" & varID
set rsTmp=server.CreateObject("ADODB.recordset")
rstmp.open strSql,cnn
if Not (rsTmp.bof and rsTmp.Eof) then
Response.Write "字段的值不唯一!" & vbCrlf & arrCon(i)
Response.Write "<Input Type=button id=btnBack name=btnBack value=重新输入(B) accesskey=B class=button onclick='history.back'>"
set rsTmp=nothing
set cnn=nothing
Response.End
end if
set rsTmp=nothing
next
'2、保存记录
strSql=TRIM(Request("txtSQL"))
strSql=Replace(strSql,"@ID@",varID)
strSql=Replace(strSql,"@XGRY@",session("UserName"))
if instr(1,strSql,"Where ID=" & varID)=0 then
'strSql不正确!不能保存!
Response.Write "保存用的SQL语句不正确!<br>"
Response.Write strSql
Response.End
end if
'3、更新计算字段
if trim(rsTable("Validation3"))<>"" then
strUpdate="Update " & strTable & " Set " & trim(rsTable("Validation3")) & " Where ID=" & varID
strSql=strSql & ";" & strUpdate
end if
On error resume next
cnn.EXECUTE strSql
if err.number<>0 then
isSave="Error"
Response.Write "<P>出错1:" & err.number & vbcrlf & err.Description & "<P>"
Response.Write "<Input Type=button id=btnBack name=btnBack value=重新输入(B) accesskey=B class=button onclick='history.back'>"
Response.Write "</Script>" & vbcrlf
Response.End
end if
'**********************************
on error goto 0
end if