我想将数据从一个数据库移动到另一个数据库,同时将标识列值保留在旧数据库中。当我运行向导时,我收到验证错误“无法插入只读列”ChannelID“。
其中ChannelID是该表上的标识列。 如何覆盖身份功能以便能够导入数据?
答案 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都完整无缺,自动编号也在那里..
完成工作。