使用c#批量复制时,标识列插入不起作用

时间:2014-06-06 20:28:17

标签: c# insert ssis identity

我在Prod中有一个SOURCE表:

    SELECT '-1' as PKey, NULL as ID, 'Unknown' as Name
    UNION
    SELECT '1' as PKey, 01 as ID, 'ABC' as Name
    UNION
    SELECT '2' as PKey, 02 as ID, 'XYZ' as Name

我想将它复制(移动)到DEV环境。为此,我有一个Foreach循环容器,其中包含以下三个任务:

1)Identity_Insert ON:检查表是否有任何标识列,如果是,则将其设置为ON(我已经测试了它并且它有效)

2)Script_task_1:这使用以下代码将数据从PROD移动到DEV

    try{
        string connectionString =
                @"Data Source=Prod_Server;Initial Catalog=Source_DB;Integrated Security=SSPI;";
        // get the source data
        using (SqlConnection sourceConnection =
                new SqlConnection(connectionString))
        {
            SqlCommand myCommand =
                new SqlCommand("SELECT * FROM " + TableName, sourceConnection);
            sourceConnection.Open();
            SqlDataReader reader = myCommand.ExecuteReader();

            // open the destination data
            string connectionString1 = @"Data Source=Dev_Server;Initial Catalog=Dest_DB;Integrated Security=SSPI;";

            using (SqlConnection destinationConnection =
                        new SqlConnection(connectionString1))
            {
                // open the connection
                destinationConnection.Open();

                using (SqlBulkCopy bulkCopy =
                new SqlBulkCopy(destinationConnection.ConnectionString, SqlBulkCopyOptions.KeepNulls & SqlBulkCopyOptions.KeepIdentity))
                {
                    bulkCopy.BatchSize = 500;
                    bulkCopy.NotifyAfter = 1000;
                    bulkCopy.SqlRowsCopied +=
                        new SqlRowsCopiedEventHandler(OnSqlRowsCopied);
                    bulkCopy.DestinationTableName = TableName;
                    bulkCopy.WriteToServer(reader);
                }
            }
            reader.Close();
            //MessageBox.Show("Data copied successfully!!");
        }
        }
            catch(Exception E){
                Console.WriteLine(E.Message);
            }

3)Identity_Insert OFF:检查表是否有任何标识列,如果是,则将其设置为OFF

在此过程之后..我的目标表看起来像这样:

    SELECT '1' as PKey, NULL as ID, 'Unknown' as Name
    UNION
    SELECT '2' as PKey, 01 as ID, 'ABC' as Name
    UNION
    SELECT '3' as PKey, 02 as ID, 'XYZ' as Name

因此,它正在正确复制数据,但根记录的Identity字段不是复制。它不是-1,而是从1开始。

有谁知道我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

我相信您想查看bulk insert books online documentation.

的KeepIdentity部分