我已经为资产确认创建了一个触发器。每当在该表中插入一条新记录时,由于该触发器,同一条记录就会被插入到asset_verification_history表中。
触发器如下
Create trigger [dbo].[tr_insert_after_asset_verification] on [dbo].[asset_verification]
for insert
As
Begin
declare @verification_id int
declare @id int
declare @audit_id int
declare @date date
declare @status varchar(15)
declare @remarks varchar(200)
declare @creationDate datetime
declare @modificationDate datetime
declare @updatedBy int
declare @audit_action varchar(20)
Select @verification_id = i.verification_id from inserted i
If @verification_id IS NOT NULL
Begin
Select @id = i.id from inserted i
Select @audit_id = i.audit_id from inserted i
Select @date = i.date from inserted i
Select @status = i.status from inserted i
Select @remarks = i.remarks from inserted i
Select @creationDate = i.creationDate from inserted i
Select @modificationDate = i.modificationDate from inserted i
Select @updatedBy = i.updatedBy from inserted i
set @audit_action = 'Insert Record'
INSERT INTO [dbo].[asset_verification_history]
([verification_id]
,[id]
,[audit_id]
,[date]
,[status]
,[remarks]
,[creationDate]
,[modificationDate]
,[updatedBy]
,[audit_action])
VALUES
(@verification_id
,@id
,@audit_id
,@date
,@status
,@remarks
,@creationDate
,@modificationDate
,@updatedBy
,@audit_action)
End
End
当我使用使用OPEN XML的过程将数据插入asset_verification表时,这个触发器只对第一条记录有效。对于其余的记录,触发器不起作用
程序如下
Create procedure [dbo].[usp_AddVerificationBulkData]
(
@vXML XML
)
As
Begin
DECLARE @DocHandle INT
SET NOCOUNT ON
EXEC sp_xml_preparedocument @DocHandle OUTPUT, @vXML
Update asset_verification
set
audit_id = x.AuditId,
id = x.SerialId,
date = x.VerificationDate,
status = x.Status
,remarks = x.Remarks
,creationDate = x.CreatedOn
,modificationDate = x.ModifiedOn
,updatedBy = x.ModifiedBy
From
asset_verification a
Inner Join
OpenXml(@DocHandle,'/ArrayOfAssetVerificationModel/AssetVerificationModel',2)
With(SerialId int, AuditId int, VerificationDate datetime, Status int, Remarks varchar(200), CreatedOn datetime, ModifiedOn datetime, ModifiedBy int) x
On a.audit_id = x.AuditId where a.id = x.SerialId;
INSERT INTO [dbo].[asset_verification]
([id]
,[audit_id]
,[date]
,[status]
,[remarks]
,[creationDate]
,[modificationDate]
,[updatedBy])
select SerialId,AuditId,VerificationDate,Status,Remarks,CreatedOn,ModifiedOn,ModifiedBy from OpenXml(@DocHandle,'/ArrayOfAssetVerificationModel/AssetVerificationModel',2)
With(SerialId int, AuditId int, VerificationDate datetime, Status int, Remarks varchar(200), CreatedOn datetime, ModifiedOn datetime, ModifiedBy int) x
where SerialId NOT IN (select a.id from asset_verification a where a.audit_id = x.AuditId);
End
问题:-如何使这个触发器适用于通过Open XML插入的每个记录?
你犯了一个典型的错误,认为每行触发一次火。它们不会,每个操作一次,因此插入的伪表包含受该操作影响的所有行。触发器需要以基于集合的方式工作,而不是基于行。试试这个;
CREATE TRIGGER [dbo].[tr_insert_after_asset_verification] ON [dbo].[asset_verification] FOR INSERT AS
BEGIN
SET NOCOUNT ON
INSERT INTO [dbo].[asset_verification_history]
( [verification_id]
,[id]
,[audit_id]
,[date]
,[status]
,[remarks]
,[creationDate]
,[modificationDate]
,[updatedBy]
,[audit_action]
)
SELECT i.verification_id
,i.id
,i.audit_id
,i.date
,i.status
,i.remarks
,i.creationDate
,i.modificationDate
,i.updatedBy
,'Insert Record'
FROM inserted i
WHERE i.verification_id IS NOT NULL
END
顺便说一句,严格来说,您的原始触发器将记录一行,不一定是第一行。
我写了这个触发器,但它不工作,我执行了这个错误: 11:24:11创建触发器check_venduti在INSERT ON venduti之后,对每一行开始SELECT count(*)作为num_rows FROM prodotto(其中COD_PRODOTTO=New.COD_PRODOTO如果numrows<0,则发出“Error”信号,结束错误代码:1064)。您的SQL语法有错误;检查与
我通过jira触发器插件将jenkins作业设置为触发器<但是jenkins作业没有被触发,尽管它从JIRA那里获得了webhook事件。 我检查了如下内容。 Jenkins得到了网络钩子事件。我在詹金斯日志上检查了这个。 我试着为詹金斯设置各种方式,但都失败了。我想知道如何设置jira触发器 > 测试环境 吉拉:6.4.11 我的测试用例是。。。 Jenkins工作设置 选中:向JIRA添加注释
我们有一个SharePoint2010站点,它有一个自定义功能,可以生成一个word文档,其中包含从所包含的列表项中动态收集的信息。信息正在从SP站点收集,并在包含内容控件的word文档中替换。除了一些字体问题之外,整个word文档生成过程都能正常工作。我们希望在文档中插入一个HTML表,以保持一些富文本格式,这些格式可以由最终用户在SP站点中设置。如果插入的是单元格内容,富文本格式将不会被解释,
我们有一个将文件复制到Azure文件服务器的外部源。文件大小约为10GB。我想在Azure文件服务器上使用Azure Data Factory完成文件复制后,立即将此文件复制到Azure Blob存储。供应商无法将此文件复制到Blob容器。有人能帮我配置什么类型的触发器吗。我可以手动复制,但我正在寻找是否可以实现自动化。我甚至不能安排这个活动,因为来自外部源的文件副本是随机的。 谢谢
我创建了一个触发器,其工作原理如下: 从表中删除数据后它将此行插入位于另一个数据库存档中的表中 我使用dblink在远程数据库中插入数据,问题是创建查询太难了,尤其是表包含20列以上,我想为10个其他表创建类似的函数。 有没有其他快速的方法来确保这项任务? 这里有一个很好的例子:
我正在配置Jira触发器插件(https://github.com/jenkinsci/jira-trigger-plugin)在詹金斯: JIRA触发器配置 我们使用Jira DC版本,并且已经按照@ceilfors共享的文档中所述设置了webhook。詹金斯的工作非常简单: Jenkins构建触发器配置 还配置了一个记录器来分类任何问题: 配置日志记录器 因此,当我在项目SNDBX下添加对任务