我创建了一个触发器,用于在服务后设备状态为“需要购买”时发送邮件。在电子邮件中,需要保修和购买日期以及设备型号。我在触发器中有3个选择语句。检索模型,但日期不起作用,数据不会保存。下面是触发器。一切正常,如果我在邮件中除了评论日期检索触发器内的数据
ALTER TRIGGER [dbo].[sendpurchaserequest]
ON [dbo].[services]
AFTER INSERT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
declare @type as varchar(50)
declare @serial as varchar(50)
declare @department as varchar(50)
declare @action as varchar(150)
declare @status as varchar(50)
declare @message as Varchar(1000)
declare @warrant as datetime
declare @model as varchar(150)
declare @purchase as varchar(20)
SET NOCOUNT ON;
-- Insert statements for trigger here
set @type = (select Equipmenttype from inserted)
set @action = (select supportaction from inserted)
set @department = (select userdepartment from inserted)
set @serial = (select serialnum from inserted)
set @status = (select [status] from inserted)
set @warrant = (select W_date from Equipment where [email protected])
set @model = (select Model from Equipment where [email protected])
set @purchase = (select P_date from Equipment where [email protected])
if @status = 'Purchase Needed '
begin
set @message = 'Diagnostic tests on the following equipment have revealed that it is in need of replacement parts to be procured.
See details below:</br></br>' + 'Equipment Type:' + @type + '</br> Model: ' + @model +'</br> Serial Number: ' + @serial + '</br></br> User Department: ' + @department + '</br> Corrective Action: ' + @action + '</br> Purchase Date: ' + @purchase + '</br> Warrant Date: ' + @warrant
print @message
EXECUTE msdb.dbo.sysmail_start_sp
EXEC msdb.dbo.sp_send_dbmail
@recipients='[email protected]',
@body = @message,
@subject = 'Purchase Needed for Equipment',
@body_format ='HTML'
end
只是检查,但它是正确的W_Date被保存到日期时间字段,而P_date进入varchar(20)? – 2015-02-10 14:28:26
对于'delete'触发器,'inserted'表应该是空的,所以这些分配大部分都是'null'。但是请注意,我也说'插入'*表*。即使您切换到使用“已删除”,您也需要认识到它可以包含0,1或*多行*。所有这些分配都被打破了,因为他们似乎认为触发表只包含一行 - 这是一个不合理的假设。 – 2015-02-10 14:35:13
哪个dbms? (看起来不像ANSI SQL ...) – jarlh 2015-02-10 14:54:44