触发器调用存储过程的疑惑

风寒晓 2014-04-11 11:59:27
描述: 触发器调用存储过程失效,单独执行存储过程正常,难道是因为触发器在对标进行更新操作过程中,是被锁住的,不允许对本表进行访问,直到事务完成?所以直接在触发器里调用当前标的数据是无效的?
* 触发器
CREATE TRIGGER [PURTC-Control] ON [dbo].[PURTC] 
FOR INSERT,UPDATE
AS
DECLARE @TC001 CHAR(4),
@TC002 CHAR(11)
begin
SET NOCOUNT ON
SELECT @TC001=TC001,@TC002=TC002 FROM INSERTED

exec PURTD_Control_Money @TC001,@TC002

SET NOCOUNT OFF
end



create proc PURTD_Control_Money
@danbie char(4),@danhao char(11)
as
declare @danbie1 char(4),@danhao1 char(11),
@users char(10),
@mail_address varchar(1000),
@datetime varchar(50),
@message1 varchar(255),
@body1 NVARCHAR(MAX)
begin

set @danbie1=@danbie
set @danhao1=@danhao
if
(
select count(*)
from
(
select TD001+'-'+TD002+'-'+TD003 采购单,TC011,TC004,TC005,TC026,CASE WHEN TC018='1' THEN '应税内含' WHEN TC018='9' THEN '不计税' end 税种,
TD009,TD010,
品号,币种,单位,含税,最低价格,
case when (含税='N' and TC018='9' ) or (含税='Y' AND TC018='1') THEN TD010
WHEN (含税='Y' AND TC018='9') or (含税='N' and TC018='1') THEN round(TD010 / (1+TC026),4)
END 转换单价
from PURTD
JOIN PURTC ON TC001=TD001 AND TC002=TD002
JOIN 品号最低价格 on 品号=TD004 and TD009=单位 and TC005=币种
WHERE TD010<>0 and TC001=@danbie1 AND TC002=@danhao1
) xxx
where 转换单价> 最低价格
) >0

BEGIN

set @users = (select TC011 FROM PURTC WHERE TC001=@danbie1 AND TC002=@danhao1)
set @mail_address = isnull((SELECT MV020 FROM CMSMV WHERE MV001=@users),'') + ''
set @datetime = convert(varchar(50),getdate(),20)
set @message1= 'ERP自动发送:采购单单价异常'
SET @body1 =
N'<H3>提示:以下物料存在更低的采购价格</H3>' + N'<H5>打印时间:'+@datetime+'</H5>' +
N'<table border="1" cellspacing="0" style="font-size: 14px" bordercolor="#CCCCCC">' +
N'<tr bgcolor="#CCFFFF"><th width="60">供应商</th><th width="60">采购员</th><th width="80">单据日期</th><th width="180">单号</th><th width="200">品号</th><th width="200">品名</th><th width="80">采购单价</th></tr>' +
CAST ( ( SELECT td = MA002,'',
td = MV002, '',
td = TC003, '',
td = TD001+'-'+TD002+'-'+TD003,'',
td = TD004, '',
td = TD005, '',
td = convert(numeric(16,4),TD010)

FROM PURTD
JOIN PURTC ON TC001=TD001 AND TC002=TD002
JOIN CMSMV ON MV001=TC011
JOIN PURMA ON MA001=TC004
WHERE TD001=@danbie AND TD002=@danhao
FOR XML PATH('tr'), TYPE
) AS NVARCHAR(MAX) ) +
N'</table> <BR/>易飞ERP自动发送,请勿回复!'

EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'ERP_mail',
@recipients='××××××××××', --邮件地址,多个;分开。@mail_address
@subject = @message1,
@body = @body1,
@body_format = 'HTMl' ;

end
END
...全文
70 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

22,209

社区成员

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

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