各位好!
请教个触发器的问题:背景:
我们公司做是gps监控系统的,混凝土行业。最近客户提了个需求,要求我们的gps监控系统与他们已有的erp系统互联,实现实时调度功能。
具体是:erp系统产生的送货单数据要与gps系统共享,erp对送货单的操作要实时体现在gps监控系统上。
公司与做erp系统的公司取得联系,并且获得了数据库接口。实现思路:我们只送货单的增加,修改、删除感兴趣,目标就是获得送货单表中变化了的记录。
知道了数据结构,利用erp公司的sql接口,在送货单表做了三个触发器,分别检测增加,修改,删除操作。
你们在erp系统的数据库总建了一个临时表TempDelivery,用来存放有触发器写入进来的记录。
建了自己的用户hdgps,这个用户只对TempDelivery表有操作权限。
gps系统中增加数据采集模块,其功能就是定时获取TempDelivery中记录,如果成功能获取还会删除成功记录。
触发器代码:
有点长,我觉得与问题关系不大,可以不看。
太长放不下,在后面补充。
问题:
触发建了之后,在查询分析器里单独测试都是正常的。
可是erp系统运行出错了,提示“服务端数据库被修改,操作失败”。
我怀疑是触发器写错了,就把触发器删除,erp系统运行就正常。
为查找原因,建立一个最简单的触发器,代码如下:CREATE TRIGGER TR_DeleteDelivery ON KC_CRKZBEX
FOR DELETE
AS
BEGIN
select count(*) from TempDelivery //这里几乎没做什么事情
END
go结果erp系统提示同样的错误。
这个触发器几乎不做什么事情,所以我认为和触发器代码无关,只要有触发器在erp就不能正常运行,
是erp系统里做了什么限制,本人是数据库菜鸟,对这样的问题是一头雾水。
咨询了erp公司技术支持人员,称开发人员已经不在公司了,他自己说不出个所以然来。
现在好郁闷!
有劳各位帮忙分析下原因,时分感谢!!!
请教个触发器的问题:背景:
我们公司做是gps监控系统的,混凝土行业。最近客户提了个需求,要求我们的gps监控系统与他们已有的erp系统互联,实现实时调度功能。
具体是:erp系统产生的送货单数据要与gps系统共享,erp对送货单的操作要实时体现在gps监控系统上。
公司与做erp系统的公司取得联系,并且获得了数据库接口。实现思路:我们只送货单的增加,修改、删除感兴趣,目标就是获得送货单表中变化了的记录。
知道了数据结构,利用erp公司的sql接口,在送货单表做了三个触发器,分别检测增加,修改,删除操作。
你们在erp系统的数据库总建了一个临时表TempDelivery,用来存放有触发器写入进来的记录。
建了自己的用户hdgps,这个用户只对TempDelivery表有操作权限。
gps系统中增加数据采集模块,其功能就是定时获取TempDelivery中记录,如果成功能获取还会删除成功记录。
触发器代码:
有点长,我觉得与问题关系不大,可以不看。
太长放不下,在后面补充。
问题:
触发建了之后,在查询分析器里单独测试都是正常的。
可是erp系统运行出错了,提示“服务端数据库被修改,操作失败”。
我怀疑是触发器写错了,就把触发器删除,erp系统运行就正常。
为查找原因,建立一个最简单的触发器,代码如下:CREATE TRIGGER TR_DeleteDelivery ON KC_CRKZBEX
FOR DELETE
AS
BEGIN
select count(*) from TempDelivery //这里几乎没做什么事情
END
go结果erp系统提示同样的错误。
这个触发器几乎不做什么事情,所以我认为和触发器代码无关,只要有触发器在erp就不能正常运行,
是erp系统里做了什么限制,本人是数据库菜鸟,对这样的问题是一头雾水。
咨询了erp公司技术支持人员,称开发人员已经不在公司了,他自己说不出个所以然来。
现在好郁闷!
有劳各位帮忙分析下原因,时分感谢!!!
select z.vcZBDJBH as 唯一ID号, z.vcDJBH as 送货单号, CONVERT(char(19) , z.dtCCSJ, 20) as 出厂时间, dw.vcDWBM as 单位编码,
dw.vcDWMC as 单位名称, dw.vcDWJC as 工程名称, z.vcHTBH as 合同编号, z.vcFHDH as 生产任务单号,
z.vcZDR as 发货人, z.vcBZ as 备注, ch.vcCHMC as 混凝土等级, jb.vcJBZMC as 搅拌站, z.fSL as 数量,
z.dDJ as 单价, z.mJE as 金额, cl.vcCPHM as 车号, zy.vcZYMC as 司机名称,
z.vcUserDefine01 as 施工部位, z.vcUserDefine04 as 坍落度, xh.vcXHFSMC as 浇灌方法, z.iSSH as 顺序号from kc_crkzbex z left join da_dwda dw on dw.pkgsda=z.pkgsda and dw.pkdwda=z.pkdwda
left join da_chda ch on ch.pkgsda=z.pkgsda and ch.pkchda=z.pkchda
left join da_xhfsda xh on xh.pkgsda=z.pkgsda and xh.pkxhfsda=z.pkxhfsda
left join hnt_jbzda jb on jb.pkgsda=z.pkgsda and jb.pkjbzda=z.pkscsbda
left join da_clda cl on cl.pkgsda=z.pkgsda and cl.pkclda=z.pkclda
left join da_zyda zy on zy.pkgsda=z.pkgsda and zy.pkzyda=z.pksjda
where z.cvouchtype='hnt_shd' and z.delflag='n' and z.istate=1
/*******************************************************************/
/***************************************送货单临时表*********************************/
if exists (select 1
from sysobjects
where id = object_id('TempDelivery')
and type = 'U')
drop table TempDelivery
go
/*==============================================================*/
/* Table: TempDelivery */
/*==============================================================*/
create table TempDelivery (
TriggerTime varchar(20) not null default convert(char(19),getdate(),20),
TriggerFlag char(1) not null,
DeliveryID varchar(30) not null,
TaskID varchar(30) null,
TaskName nvarchar(20) null,
DeliveryDate varchar(20) not null,
ProjectCmpy varchar(50) null,
ProjectName varchar(50) null,
ProjectPart varchar(50) null,
RecipeNo varchar(50) null,
IntensityLevel varchar(20) null,
TLD varchar(20) null,
SSZDLJ varchar(30) null,
WorkMethod varchar(30) null,
TruckID varchar(30) not null,
Quantity numeric(18,2) null,
PlanCount numeric(18,2) null,
EndCount numeric(18,2) null,
OutCount int null,
Distance int null,
FName nvarchar(20) null,
DName nvarchar(20) null,
Memo1 varchar(50) null,
Memo2 varchar(50) null,
DriverName nvarchar(20) null,
constraint PK_TEMPDELIVERY primary key (TriggerTime, DeliveryID, DeliveryDate)
)
go
/***************************送货单临时表******************************/
/*==============================================================*/
/* 恒盛公司送货单插入触发器 */
/*==============================================================*/if exists (select 1
from sysobjects
where id = object_id('TR_InsertDelivery')
and type = 'TR')
drop trigger TR_InsertDelivery
go
CREATE TRIGGER TR_InsertDelivery ON KC_CRKZBEX
FOR INSERT
AS
BEGIN/*插入送货临时表TempDelivery*/
INSERT INTO TempDelivery(TriggerFlag ,
DeliveryID , /*z.vcDJBH*/
TaskID , /*z.vcFHDH*/
TaskName , /*无任务名*/
DeliveryDate , /*z.dtCCSJ*/
ProjectCmpy , /*dw.vcDWMC*/
ProjectName , /*dw.vcDWJC*/
ProjectPart , /*z.vcUserDefine01*/
RecipeNo , /*无配比*/
IntensityLevel , /*ch.vcCHMC*/
TLD , /*z.vcUserDefine04*/
SSZDLJ , /*无粒径*/
WorkMethod , /*xh.vcXHFSMC*/
TruckID , /*cl.vcCPHM*/
Quantity , /*z.fSL*/
PlanCount , /*无计划方量*/
EndCount , /*无输送方量*/
OutCount , /*无车次*/
Distance , /*无距离*/
FName , /*z.vcZDR*/
DName , /*无检验员*/
Memo1 , /*z.vcBZ*/
Memo2 , /*无备注2*/
DriverName /*zy.vcZYMC*/
)
SELECT '0' ,
z.vcDJBH , /*送货单id*/
z.vcFHDH , /*任务id*/
'' , /*无任务名*/
CONVERT(char(19) , z.dtCCSJ, 20) ,/*送货单时间*/
dw.vcDWMC , /*施工单位名称*/
dw.vcDWJC , /*工程名*/
z.vcUserDefine01 , /*施工部位*/
'' , /*无配比*/
ch.vcCHMC , /*强度等级*/
z.vcUserDefine04 , /*塌落度*/
'' , /*无粒径*/
xh.vcXHFSMC , /*工作方式*/
ISNULL(cl.vcCPHM, ''), /*车辆编号*/
z.fSL , /*本车方量*/
0.0 , /*无计划方量*/
0.0 , /*无输送方量*/
0 , /*无车次*/
0.0 , /*无距离*/
z.vcZDR , /*发货人*/
'' , /*无检验员*/
z.vcBZ , /*备注1*/
'' , /*无备注2*/
zy.vcZYMC /*司机*/
FROM inserted z left join da_dwda dw on dw.pkgsda=z.pkgsda and dw.pkdwda=z.pkdwda
left join da_chda ch on ch.pkgsda=z.pkgsda and ch.pkchda=z.pkchda
left join da_xhfsda xh on xh.pkgsda=z.pkgsda and xh.pkxhfsda=z.pkxhfsda
left join hnt_jbzda jb on jb.pkgsda=z.pkgsda and jb.pkjbzda=z.pkscsbda
left join da_clda cl on cl.pkgsda=z.pkgsda and cl.pkclda=z.pkclda
left join da_zyda zy on zy.pkgsda=z.pkgsda and zy.pkzyda=z.pksjda
where z.cvouchtype='hnt_shd' and z.delflag='n' and z.istate=1END
go
/*==============================================================*/
/* *恒盛公司送货单修改触发器 */
/*==============================================================*/
if exists (select 1
from sysobjects
where id = object_id('TR_UpdateDelivery')
and type = 'TR')
drop trigger TR_UpdateDelivery
go
CREATE TRIGGER TR_UpdateDelivery ON KC_CRKZBEX
FOR UPDATE
AS/**************修改了删除标志为非“N”或状态标志为非“1”相当于删除*********/
IF UPDATE(delflag) or UPDATE(istate)
BEGIN/*插入送货临时表TempDelivery*/
INSERT INTO TempDelivery(TriggerFlag ,
DeliveryID , /*z.vcDJBH*/
TaskID , /*z.vcFHDH*/
TaskName , /*无任务名*/
DeliveryDate , /*z.dtCCSJ*/
ProjectCmpy , /*dw.vcDWMC*/
ProjectName , /*dw.vcDWJC*/
ProjectPart , /*z.vcUserDefine01*/
RecipeNo , /*无配比*/
IntensityLevel , /*ch.vcCHMC*/
TLD , /*z.vcUserDefine04*/
SSZDLJ , /*无粒径*/
WorkMethod , /*xh.vcXHFSMC*/
TruckID , /*cl.vcCPHM*/
Quantity , /*z.fSL*/
PlanCount , /*无计划方量*/
EndCount , /*无输送方量*/
OutCount , /*无车次*/
Distance , /*无距离*/
FName , /*z.vcZDR*/
DName , /*无检验员*/
Memo1 , /*z.vcBZ*/
Memo2 , /*备注2*/
DriverName /*zy.vcZYMC*/
)
SELECT '1' ,
z.vcDJBH , /*送货单id*/
z.vcFHDH , /*任务id*/
'' , /*无任务名*/
CONVERT(char(19) , z.dtCCSJ, 20) ,/*送货单时间*/
dw.vcDWMC , /*施工单位名称*/
dw.vcDWJC , /*工程名*/
z.vcUserDefine01 , /*施工部位*/
'' , /*无配比*/
ch.vcCHMC , /*强度等级*/
z.vcUserDefine04 , /*塌落度*/
'' , /*无粒径*/
xh.vcXHFSMC , /*工作方式*/
ISNULL(cl.vcCPHM, ''), /*车辆编号*/
z.fSL , /*本车方量*/
0.0 , /*无计划方量*/
0.0 , /*无输送方量*/
0 , /*无车次*/
0.0 , /*无距离*/
z.vcZDR , /*发货人*/
'' , /*无检验员*/
z.vcBZ , /*备注1*/
'' , /*无备注2*/
zy.vcZYMC /*司机*/
FROM inserted z left join da_dwda dw on dw.pkgsda=z.pkgsda and dw.pkdwda=z.pkdwda
left join da_chda ch on ch.pkgsda=z.pkgsda and ch.pkchda=z.pkchda
left join da_xhfsda xh on xh.pkgsda=z.pkgsda and xh.pkxhfsda=z.pkxhfsda
left join hnt_jbzda jb on jb.pkgsda=z.pkgsda and jb.pkjbzda=z.pkscsbda
left join da_clda cl on cl.pkgsda=z.pkgsda and cl.pkclda=z.pkclda
left join da_zyda zy on zy.pkgsda=z.pkgsda and zy.pkzyda=z.pksjda
where z.cvouchtype='hnt_shd' and (z.delflag<>'n' or z.istate <>1)ENDELSE /*修改了除delflag 和 istate 以外的字段*/
BEGIN/*插入送货临时表TempDelivery*/
INSERT INTO TempDelivery(TriggerFlag ,
DeliveryID , /*z.vcDJBH*/
TaskID , /*z.vcFHDH*/
TaskName , /*无任务名*/
DeliveryDate , /*z.dtCCSJ*/
ProjectCmpy , /*dw.vcDWMC*/
ProjectName , /*dw.vcDWJC*/
ProjectPart , /*z.vcUserDefine01*/
RecipeNo , /*无配比*/
IntensityLevel , /*ch.vcCHMC*/
TLD , /*z.vcUserDefine04*/
SSZDLJ , /*无粒径*/
WorkMethod , /*xh.vcXHFSMC*/
TruckID , /*cl.vcCPHM*/
Quantity , /*z.fSL*/
PlanCount , /*无计划方量*/
EndCount , /*无输送方量*/
OutCount , /*无车次*/
Distance , /*无距离*/
FName , /*z.vcZDR*/
DName , /*无检验员*/
Memo1 , /*z.vcBZ*/
Memo2 , /*备注2*/
DriverName /*zy.vcZYMC*/
)
SELECT '2' ,
z.vcDJBH , /*送货单id*/
z.vcFHDH , /*任务id*/
'' , /*无任务名*/
CONVERT(char(19) , z.dtCCSJ, 20) ,/*送货单时间*/
dw.vcDWMC , /*施工单位名称*/
dw.vcDWJC , /*工程名*/
z.vcUserDefine01 , /*施工部位*/
'' , /*无配比*/
ch.vcCHMC , /*强度等级*/
z.vcUserDefine04 , /*塌落度*/
'' , /*无粒径*/
xh.vcXHFSMC , /*工作方式*/
ISNULL(cl.vcCPHM, ''), /*车辆编号*/
z.fSL , /*本车方量*/
0.0 , /*无计划方量*/
0.0 , /*无输送方量*/
0 , /*无车次*/
0.0 , /*无距离*/
z.vcZDR , /*无发货人*/
'' , /*检验员*/
z.vcBZ , /*备注1*/
'' , /*备注2*/
zy.vcZYMC /*司机*/
FROM inserted z left join da_dwda dw on dw.pkgsda=z.pkgsda and dw.pkdwda=z.pkdwda
left join da_chda ch on ch.pkgsda=z.pkgsda and ch.pkchda=z.pkchda
left join da_xhfsda xh on xh.pkgsda=z.pkgsda and xh.pkxhfsda=z.pkxhfsda
left join hnt_jbzda jb on jb.pkgsda=z.pkgsda and jb.pkjbzda=z.pkscsbda
left join da_clda cl on cl.pkgsda=z.pkgsda and cl.pkclda=z.pkclda
left join da_zyda zy on zy.pkgsda=z.pkgsda and zy.pkzyda=z.pksjda
where z.cvouchtype='hnt_shd' and z.delflag='n' and z.istate=1
END
go
/*==============================================================*/
/* 恒盛公司送货单删除触发器 */
/*==============================================================*/
if exists (select 1
from sysobjects
where id = object_id('TR_DeleteDelivery')
and type = 'TR')
drop trigger TR_DeleteDelivery
goCREATE TRIGGER TR_DeleteDelivery ON KC_CRKZBEX
FOR DELETE
AS
BEGIN/*插入送货临时表TempDelivery*/
INSERT INTO TempDelivery(TriggerFlag ,
DeliveryID , /*z.vcDJBH*/
TaskID , /*z.vcFHDH*/
TaskName , /*无任务名*/
DeliveryDate , /*z.dtCCSJ*/
ProjectCmpy , /*dw.vcDWMC*/
ProjectName , /*dw.vcDWJC*/
ProjectPart , /*z.vcUserDefine01*/
RecipeNo , /*无配比*/
IntensityLevel , /*ch.vcCHMC*/
TLD , /*z.vcUserDefine04*/
SSZDLJ , /*无粒径*/
WorkMethod , /*xh.vcXHFSMC*/
TruckID , /*cl.vcCPHM*/
Quantity , /*z.fSL*/
PlanCount , /*无计划方量*/
EndCount , /*无输送方量*/
OutCount , /*无车次*/
Distance , /*无距离*/
FName , /*z.vcZDR*/
DName , /*无检验员*/
Memo1 , /*z.vcBZ*/
Memo2 , /*备注2*/
DriverName /*zy.vcZYMC*/
)
SELECT '1' ,
z.vcDJBH , /*送货单id*/
z.vcFHDH , /*任务id*/
'' , /*无任务名*/
CONVERT(char(19) , z.dtCCSJ, 20) ,/*送货单时间*/
dw.vcDWMC , /*施工单位名称*/
dw.vcDWJC , /*工程名*/
z.vcUserDefine01 , /*施工部位*/
'' , /*无配比*/
ch.vcCHMC , /*强度等级*/
z.vcUserDefine04 , /*塌落度*/
'' , /*无粒径*/
xh.vcXHFSMC , /*工作方式*/
ISNULL(cl.vcCPHM,''), /*车辆编号*/
z.fSL , /*本车方量*/
0.0 , /*无计划方量*/
0.0 , /*无输送方量*/
0 , /*无车次*/
0.0 , /*无距离*/
z.vcZDR , /*发货人*/
'' , /*无检验员*/
z.vcBZ , /*备注1*/
'' , /*无备注2*/
zy.vcZYMC /*司机*/
FROM deleted z left join da_dwda dw on dw.pkgsda=z.pkgsda and dw.pkdwda=z.pkdwda
left join da_chda ch on ch.pkgsda=z.pkgsda and ch.pkchda=z.pkchda
left join da_xhfsda xh on xh.pkgsda=z.pkgsda and xh.pkxhfsda=z.pkxhfsda
left join hnt_jbzda jb on jb.pkgsda=z.pkgsda and jb.pkjbzda=z.pkscsbda
left join da_clda cl on cl.pkgsda=z.pkgsda and cl.pkclda=z.pkclda
left join da_zyda zy on zy.pkgsda=z.pkgsda and zy.pkzyda=z.pksjda
where z.cvouchtype='hnt_shd' and z.delflag='n' and z.istate=1
END
go
FOR DELETE
AS
BEGIN
set nocount on; --加这句试试
select count(*) from TempDelivery //这里几乎没做什么事情
END
go
sa是odb,应该有权限吧
FOR DELETE
AS
BEGIN
select count(*) from TempDelivery //这里几乎没做什么事情
END
go这个触发器触发之前,操作是怎样的!
意思是说erp系统做了些什么吗?
我不知道啊,他们的技术支持人员只负责部署了系统,开发人员不在这里了。我们的系统还没做任何事情,现在只部署了触发器。。
你建立好触发器后,在ERP做了什么操作弹出的这个框!
只要运行ERP就报这个错误?
ERP是用sa用户运行的?