带有标识列的导入和导出向导

时间:2011-05-05 06:34:41

标签: sql-server sql-server-2008 sql-server-2008-r2

我想将数据从一个数据库移动到另一个数据库,同时将标识列值保留在旧数据库中。当我运行向导时,我收到验证错误“无法插入只读列”ChannelID“。

其中ChannelID是该表上的标识列。 如何覆盖身份功能以便能够导入数据?

7 个答案:

答案 0 :(得分:106)

您需要启用身份插入。单击“编辑映射”时会出现一个复选框。

答案 1 :(得分:8)

Byte56的答案是正确的 - 从Edit Mappings屏幕中选中“Enable identity insert”。我只是想指出“选择源表和视图”列表支持多选,因此您可以按住Shift或Ctrl来选择列表中的多个表。

答案 2 :(得分:5)

您应该使用SET IDENTITY INSERT ON来允许在IDENTITY列中插入值

以下是link到MSDN

答案 3 :(得分:5)

编辑列映射中,勾选启用IDENTITY INSERT。 然后单击编辑SQL 按钮。

更改

[MyID] int NOT NULL,

[MyID] int IDENTITY(1,1),

适用于导​​入MS Access数据库。这将保留自动编号字段中的数据转换为标识列。

答案 4 :(得分:1)

使用SSMS 2008 R2的SQL Server 2008 R2。

只需在"编辑映射"上启用标识不保留identity = true。我必须手动编辑每个表的sql,并在sql代码中包含IDENTITY属性。

示例:ADD MS_IDENT numeric(18,0)IDENTITY NOT NULL,

答案 5 :(得分:1)

我刚刚升级到SQL Server Management Studio 2017.我尝试检查"使用身份" “编辑映射”对话框中的复选框,但这不起作用。更新现有表时,向导不允许您编辑SQL。相反,我能够将其保存为硬盘上的软件包。然后我在记事本中编辑了该文件,搜索" identity"。果然,该属性设置为true,根据文件本身的注释,表示从源复制标识列的值。将其更改为false会导致在目标中自动生成值。希望这会有所帮助。

答案 6 :(得分:0)

我花了一些时间试图为此找到解决方案

我有一个包含300多个表的访问数据库并使用SSMS2017导入工具我无法保留主键和自动编号,而无需手动编辑每个表的配置....不好......

最后我使用了bullzip制作的工具(MS Access to MSSQL),它允许我从访问转换为mssql(他们也有一个访问MySQL的工具)

该工具可以为您完成工作,如果您有一个小表,或者直接到服务器,则可以使用脚本。

所有ID都完整无缺,自动编号也在那里..

完成工作。