DB触发器获胜';t在SqlBulkCopy写入服务器新行后执行

本文关键字:服务器 新行 执行 SqlBulkCopy 获胜 触发器 DB | 更新日期: 2024-10-21 01:54:43

插入新行后,我正在尝试更新ssn列。指定我需要将null设置为ssn列,并将该加密值设置为另一列。我的扳机有什么错误吗?

ALTER TRIGGER [dbo].[MemberInsert]
ON [dbo].[Member]
AFTER INSERT
AS 
BEGIN   
SET NOCOUNT ON;
OPEN SYMMETRIC KEY SSN_Key
    DECRYPTION BY CERTIFICATE MyCer;
UPDATE Member
SET  [EncryptedSSN] = EncryptByKey(Key_GUID('SSN_Key'), inserted.SSN)
FROM inserted
INNER JOIN dbo.Member On inserted.MemberId = Member.MemberId
UPDATE Member
SET [SSN] = null 
FROM inserted
INNER JOIN dbo.Member On inserted.MemberId = Member.MemberId
END

现在添加的行没有发生任何变化。此外,我还必须添加并使用SqlBulkCopy插入新行。触发器通过这种方式捕获事件有问题吗?

DB触发器获胜';t在SqlBulkCopy写入服务器新行后执行

SqlBulkCopy默认情况下不检查触发器,您必须指定选项:SqlBulkCopyOptions

var options = SqlBulkCopyOptions.FireTriggers | SqlBulkCopyOptions.CheckConstraints;
using (var bulkCopy = new SqlBulkCopy(connection, options, transaction))
{
    // ...Code...
}