SqlBulkCopy 写入服务器新行后,数据库触发器不会执行
DB trigger won't execute after SqlBulkCopy write to server new rows
我正在尝试在插入新行后更新 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
插入新行。触发器这样捕获事件有问题吗?
SqlBulkCopy 默认不检查触发器,您必须指定选项:SqlBulkCopyOptions
var options = SqlBulkCopyOptions.FireTriggers | SqlBulkCopyOptions.CheckConstraints;
using (var bulkCopy = new SqlBulkCopy(connection, options, transaction))
{
// ...Code...
}
我正在尝试在插入新行后更新 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
插入新行。触发器这样捕获事件有问题吗?
SqlBulkCopy 默认不检查触发器,您必须指定选项:SqlBulkCopyOptions
var options = SqlBulkCopyOptions.FireTriggers | SqlBulkCopyOptions.CheckConstraints;
using (var bulkCopy = new SqlBulkCopy(connection, options, transaction))
{
// ...Code...
}