SSIS:“失败插入只读列 ”(SSIS: “Failure inserting into t

2019-10-18 18:35发布

我有一个Excel源进入一个OLE DB目的地。 我将数据插入到具有INSTEAD OF触发器来处理所有插入的视图。 当我尝试执行包我收到此错误:

“失败插入只读列的ColumnName”

我能做些什么来让SSIS知道这个观点是安全的插入,因为有一个INSTEAD OF触发器将处理插入呢?

编辑(附加信息):
一些更多的附加信息。 我有被插入一个规范化的数据库平面文件。 我最初的问题是我怎么走平坦的文件和数据插入到多个表中同时跟踪所有的主/外键关系。 我的解决方案是创建模仿平面文件的结构的图,然后在该视图创建INSTEAD OF触发器。 在INSTEAD OF触发器我我会处理好保持所有表之间的关系的逻辑

我的观点看起来是这样的。

CREATE VIEW ImportView
AS
SELECT
CONVERT(varchar(100, NULL) AS CustomerName,
CONVERT(varchar(100), NULL) AS Address1,
CONVERT(varchar(100), NULL) AS Address2,
CONVERT(varchar(100), NULL) AS City,
CONVERT(char(2), NULL) AS State,
CONVERT(varchar(250), NULL) AS ItemOrdered,
CONVERT(int, NULL) AS QuantityOrdered
...

我永远不会需要从该视图中选择,我只用它从我收到此平面文件数据插入到它。 我需要好歹告诉SQL Server的这些字段是不是真的只读,因为有一个INSTEAD这种观点OF触发器。

Answer 1:

此外,你可以只选择Keep Identity复选框在OLEDB目标编辑器,如果你的列是IDENTITY



Answer 2:

这不是一个理想的解决方案,但我找到了一个解决办法,以我的问题。 由于SSIS在抱怨插入我的看法,我创建具有完全相同的结构,我认为表。 然后,在一个而不是在该表触发器,我仅插入目的地为表到视图中的信息。 这增加了一个步骤到导入过程,但不是一个大问题。



Answer 3:

为什么列“只读”? 你可以发布的视图和基础表(S)模式? 是列IDENTITY ? 是否有一个WITH CHECK OPTION的看法? 它是一个派生(计算)列?

更新

现在我明白,视图的有点不寻常的应用程序,也许一个存储过程将是比较合适的选择 - 在一个数据库中的存储过程和SSIS的OLEDB命令。

你有一个表作为目的地最终的解决方案实际上是更快,提供您不使用触发器,但使用批量插入从临时表到“最后”表。



文章来源: SSIS: “Failure inserting into the read-only column