使用导入向导,我尝试将数据导入表tcc_Block
和PROJECT_IDENTITY
中。
这2个表结构已经存在于SQL Server中,并且通过ProjectID
列进行关联。 PROJECT_IDENTITY
具有ProjectID
作为PK和tcc_Block
作为FK密钥。
每次导入表时,父表中的ProjectID
都会创建并递增,但子表中的NULL
始终是。{p>
触发器永不触发!?
ALTER TRIGGER [dbo].[InsertTest]
ON [dbo].[tcc_Block]
AFTER INSERT
AS
BEGIN
DECLARE @proj int;
SELECT @proj = MAX(ProjectID)
FROM PROJECT_IDENTITY;
UPDATE tcc_Block
SET ProjectID = @proj
WHERE ProjectID IS NULL;
END;
GO
答案 0 :(得分:0)
Bulk inserts通常不会触发触发器,除非它被显式设置(请参阅FIRE_TRIGGERS
)。如果在SSIS中编辑了此程序包(“导入导出向导”将生成SSIS程序包),则可以在“批量插入任务编辑器选项”页面上选择“触发”选项。但是“导入导出向导”没有提供设置此选项的方法。您可以将包保存到文件系统中,然后在Visual Studio中对其进行编辑以启用此选项,也可以将数据导出为平面文件,并使用BULK INSERT
命令(指定FIRE_TRIGGERS选项)将其导入。
答案 1 :(得分:0)
我在将SQL 2008导出另存为文件系统中的dtsx包时遇到了类似的问题。因此,我在SSMS 2016中打开了该程序包,并将其作为xml文件打开。我找到了“ FastLoadOptions”属性:属性id =“ 72” name =“ FastLoadOptions”。 然后滚动到输入选项的行的末尾并添加“ FIRE_TRIGGERS”:
TABLOCK,CHECK_CONSTRAINTS,FIRE_TRIGGERS /属性>。 保存并重新加载到我的工作步骤中(不要忘记检查“执行”选项卡上的“使用32位运行时”)。而且效果很好。