我必须进行数据迁移。
为此,我必须禁用列的标识,并且在添加数据后,需要为 SQL Server 2008 中的同一列再次启用该标识。
有人可以解释如何做到这一点,或者还有其他方法可以完成相同的任务吗?
我必须进行数据迁移。
为此,我必须禁用列的标识,并且在添加数据后,需要为 SQL Server 2008 中的同一列再次启用该标识。
有人可以解释如何做到这一点,或者还有其他方法可以完成相同的任务吗?
使用SET IDENTITY_INSERT
( http://msdn.microsoft.com/en-us/library/ms188059.aspx )。
SET IDENTITY_INSERT TableName ON;
-- Insert Data.
SET IDENTITY_INSERT TableName OFF;
如果您使用普通INSERT
语句进行迁移,则可以使用IDENTITY_INSERT
*:
SET IDENTITY_INSERT abc ON
INSERT INTO abc (/* Columns */) VALUES
(/* Values */)
SET IDENTITY_INSERT abc OFF
如果您正在使用BULK INSERT
,那么您需要该KEEPIDENTITY
选项。
如果您使用的是 SSIS OLE DB 目标,那么您需要使用 Keep Identity 选项。
如果您使用的是 SQL Server 导入和导出向导,那么当您在向导的“选择源表和视图”页面上选择了适当的工作表/表时,选择Edit Mappings...
并勾选该Enable identity insert
选项。
*许多人发现这个选项的命名令人困惑,因为他们认为他们是在告诉系统要做什么——“请插入标识值”——相反,意思是“我要插入标识值”。这就是为什么您在插入之前打开它并在之后关闭它,而不是反之亦然。