You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

SQL Server导入CSV报错:无法插入只读列'id',求类似SSIS报错解决方法

解决SQL Server/SSIS导入CSV时“只读列插入失败”的问题

嘿,这个问题我碰到过好多次了,本质原因很明确:你试图往只读列(比如自增ID、计算列,或者被设置为只读的列)里写入数据,但这类列的值是数据库自动维护的,不允许外部输入。下面分两种场景给你具体的解决步骤:

场景1:用SQL Server导入向导从CSV导入数据

  • 重新启动导入向导,当走到「选择源表和源视图」这一步时,点击编辑映射按钮。
  • 在映射窗口里找到报错的列(比如id):
    • 如果这是自增列(设置了IDENTITY(1,1)),把对应的「输入列」设置为<忽略>——这样导入时就不会往这个列写数据,数据库会自动生成自增值。
    • 如果是计算列或者其他只读列,同样把输入列设为忽略,确保不尝试向该列插入数据。
  • 确认映射设置后继续完成导入流程,报错应该就会消失。

场景2:SSIS包执行时出现该报错

  • 打开你的SSIS包,找到对应的数据流任务,双击进入数据流编辑器。
  • 找到连接数据源和目标表的组件(比如OLE DB目标),双击打开编辑窗口。
  • 切换到「映射」选项卡,定位到报错的<ColumnName>列:
    • 如果是自增列,确保该列没有映射到源数据的任何列(也就是目标列对应的输入列留空或选择忽略)。
    • 如果是其他只读列,同样取消该列的映射,避免源数据写入这个列。
  • 特殊情况:如果你需要保留CSV里的原有ID值(比如数据迁移场景),可以开启IDENTITY_INSERT:在OLE DB目标的高级编辑窗口中,找到「访问模式」对应的设置,勾选「保留标识」;或者在执行导入前手动运行SET IDENTITY_INSERT YourTableName ON(导入完成后记得再关闭:SET IDENTITY_INSERT YourTableName OFF)。

额外注意事项

  • 提前检查目标表的列属性:确认报错列是不是自增列、计算列,或者有没有被设置为只读权限,这些都会导致无法外部写入。
  • 如果CSV里本身包含了只读列的数据,导入时必须忽略该列的映射,否则必然会触发冲突报错。

内容的提问来源于stack exchange,提问作者Joshua Simon Bloom

火山引擎 最新活动