11

我正在尝试将数据从生产数据库导出到开发数据库,​​但出现此错误:

消息错误 0xc0202049:数据流任务 1:插入只读列“id”失败。(SQL Server 导入和导出向导)

有没有办法检查哪一列是因为我有 20 个表,它们都使用列名id,或者至少得到更好的错误报告?

4

5 回答 5

39

Edit mappings当您选择要从中导入和导入的表时,只需单击即可。并选中Enable identity insert复选框。你应该对每个选择的表都这样做。然后就可以完成导入了。在同样的情况下,它对我有所帮助。

于 2014-09-04T14:49:51.113 回答
5

如果列 ID 是标识列,它可能设置为在插入行时自动生成,并且无法直接写入。

要保留从生产环境到测试的链接,请使用:

SET Identity_Insert <TableName> ON

允许您编写标识值。

于 2012-08-28T15:17:39.443 回答
3

我所要做的就是:

  • 右键单击列(在本例中为“ID”)
  • 选择修改
  • 在 Column Properties 内向下滚动,直到您看到 Identity Specification
  • 展开视图并从下拉菜单中选择 NO。

如果有人知道这样做的不同(更快)方式,请分享

于 2012-08-28T16:35:12.627 回答
0

听起来好像您可能正在尝试将值插入已声明为 IDENTITY 字段的列中。

于 2012-08-28T15:18:56.960 回答
0

好吧,答案有点晚了,但我还是发布它是为了提供给社区。

我假设您正在尝试复制表(不是部分数据)。我的回答是基于这个假设。

  1. 通过 SSMS 中的对象资源管理器连接到源数据库。
  2. 右键单击要复制其表的数据库。
  3. 转到“任务”->“导出”
  4. 选择您的源服务器和目标服务器,如果您不想在动手之前运行其他脚本,只需按下一步(“从一个或多个表或视图复制数据”)。现在您可以选择要复制到目标的表。

选择要完全复制到目标的表。然后单击“编辑映射”。在这里您可以“启用身份插入”。您还将有其他选项,因此请在按 OK 之前检查屏幕。

如果您在此处不使用 SSMS 的快速版本,则可以创建一个 SSIS 包来创建作业并在将来自动化此过程。您可以检查“立即运行”并按照屏幕了解所有警告和错误的情况。希望你什么也得不到。祝你好运!

Tested with:
(
    Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (Intel X86) 
    Jun 17 2011 00:57:23 
    Copyright (c) Microsoft Corporation
    Enterprise Edition on Windows NT 5.2 <X86> (Build 3790: Service Pack 2)
)
于 2014-07-10T03:28:06.140 回答