我需要将一些数据从一个数据库表复制到另一个数据库表中。由于其中一个列是标识列,因此我无法使用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. 将一个表分成两个新表。将来每个表都将有自己的标识列,但为了迁移,我认为使用原始表的标识作为两个新表的标识最简单。迁移结束后,其中一个表将与另一个表存在一对多关系。 2. 将某些列从一个表移到另一个表。 3. 删除一些只进行1对1交叉引用的交叉引用表。代替方法是在两个表中的一个中使用外键引用。 4. 创建带有默认值的新列。 5. 有些表根本不会改变,但由于“将所有内容放入新数据库”的要求,我必须将它们复制过来。
编辑: 我知道IDENTITY_INSERT,但由于涉及大量数据,使用INSERT INTO ... SELECT速度较慢。SSIS/BULK INSERT可以将数据转储到表中而不考虑索引、日志和其他内容,因此速度更快。(当然,在填充完表后创建聚集索引并不快,但仍然比我在第一次尝试中使用的INSERT INTO...SELECT要快)
编辑2: 模式更改包括(但不限于)以下内容: 1. 将一个表分成两个新表。将来每个表都将有自己的标识列,但为了迁移,我认为使用原始表的标识作为两个新表的标识最简单。迁移结束后,其中一个表将与另一个表存在一对多关系。 2. 将某些列从一个表移到另一个表。 3. 删除一些只进行1对1交叉引用的交叉引用表。代替方法是在两个表中的一个中使用外键引用。 4. 创建带有默认值的新列。 5. 有些表根本不会改变,但由于“将所有内容放入新数据库”的要求,我必须将它们复制过来。