Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在SQL批量复制到另一个表期间维护标识列值?_C#_Sql_Asp.net_Sql Server - Fatal编程技术网

C# 如何在SQL批量复制到另一个表期间维护标识列值?

C# 如何在SQL批量复制到另一个表期间维护标识列值?,c#,sql,asp.net,sql-server,C#,Sql,Asp.net,Sql Server,我正在使用SqlBulkCopy将数据从一个表复制到另一个表。有那么多桌子可以做这个 我正在复制每个表的for循环数据 但是,我面临一个问题,每当我将数据从源表复制到目标表时,标识列值就会发生变化 假设在源表的标识列中有这样的值 301 305 605 但当我复制数据时,它会像这样导入到目标表中 1 2 3 我试过: set identity_insert [tablename] ON //COPY Data from source to destination s

我正在使用
SqlBulkCopy
将数据从一个表复制到另一个表。有那么多桌子可以做这个

我正在复制每个表的for循环数据

但是,我面临一个问题,每当我将数据从源表复制到目标表时,标识列值就会发生变化

假设在源表的标识列中有这样的值

301
305
605
但当我复制数据时,它会像这样导入到目标表中

1
2
3
我试过:

    set identity_insert [tablename] ON

    //COPY Data from source to destination
    set identity_insert [tablename] OFF
我还设置了
SqlBulkCopyOption.KeepIdentity
我的c代码


任何解决方案都将受到高度赞赏

我相信您的想法是正确的。这个问题似乎是一个布尔逻辑问题。 您有:SqlBulkCopyOptions.KeepNulls和SqlBulkCopyOptions.KeepIdentity 这两项的值为:

SqlBulkCopyOptions.KeepNulls=8=00001000

SqlBulkCopyOptions.KeepIdentity=1=0000000 1

布尔“&”运算符将两个值相加(意味着保留二进制中的公共位)。此操作的值将导致零。 你真正想要的是OR:8 | 1=9

新的SqlBulkCopy(ConfigurationManager.ConnectionString[“ConnectionDatabase2”]。ConnectionString,SqlBulkCopyOptions.KeepNulls | SqlBulkCopyOptions.KeepIdentity))


与英语相比,布尔运算符有点落后:如果要保留ulls和KeepIdentity,则需要将这两个值合并在一起。

KeepIdentity是解决这一问题的标准解决方案。您的代码中有一个bug。没人,代码看起来很完美,但每次在目标表关闭问题中,标识列都会重置,因为OP不愿意提供诊断问题所需的信息。这使得这个问题无法回答。如果你的代码是完美的,为什么会有问题?好吧,对不起,我不是指你说的“展示”这个词我已经粘贴了我的代码,请看一下。
          //  Dataservice.KeepIdentity2("SET IDENTITY_INSERT "+tableName+" ON");

            using (SqlBulkCopy bulkCopy =
                 new SqlBulkCopy(ConfigurationManager.ConnectionStrings["ConnectionDatabase2"].ConnectionString, SqlBulkCopyOptions.KeepNulls & SqlBulkCopyOptions.KeepIdentity))
            {
                bulkCopy.SqlRowsCopied +=
                    new SqlRowsCopiedEventHandler(OnSqlRowsTransfer);
                bulkCopy.BatchSize = 5000;
                bulkCopy.DestinationTableName = tableName;
                bulkCopy.WriteToServer(DestinationDatatable);
            }
            //Set Identity insert OFF
          //  Dataservice.KeepIdentity2("SET IDENTITY_INSERT " + tableName + " OFF");