我必须将一堆数据从一个数据库表复制到另一个。我不能使用 SELECT ... INTO 因为其中一列是标识列。另外,我要对架构进行一些更改。我能够使用导出数据向导创建一个 SSIS 包,然后我在 Visual Studio 2005 中对其进行编辑以进行所需的更改等等。它肯定比 INSERT INTO 快,但对我来说将数据下载到另一台计算机只是为了再次上传回来似乎很愚蠢。(假设我是正确的,这就是 SSIS 包正在做的事情)。是否有与直接在服务器上运行的 BULK INSERT 等效的方法,允许保留标识值并从表中提取数据?(据我所知,BULK INSERT 只能从文件中提取数据)
编辑:我确实知道 IDENTITY_INSERT,但是因为涉及到大量数据,所以 INSERT INTO ... SELECT 有点慢。SSIS/BULK INSERT 将数据转储到表中,而不考虑索引和日志记录等,因此速度更快。(当然,一旦填充表就在表上创建聚集索引并不快,但它仍然比我第一次尝试的 INSERT INTO...SELECT 快)
编辑 2:架构更改包括(但不限于)以下内容: 1. 将一个表拆分为两个新表。将来每个都有自己的 IDENTITY 列,但对于迁移,我认为使用原始表中的标识作为两个新表的标识是最简单的。一旦迁移结束,其中一个表将与另一个表具有一对多的关系。2. 将列从一张表移动到另一张表。3. 删除一些仅一对一交叉引用的交叉引用表。相反,引用将是两个表之一中的外键。4. 将使用默认值创建一些新列。5. 有些表根本没有变化,但由于“将其全部放入新数据库”请求,我必须将它们复制过来。