[英]How to maintain identity column value during SQL bulk copy to another table?
我正在使用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#代碼
// 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");
任何解決方案將受到高度贊賞
我相信你有正確的想法。 問題似乎是一個布爾邏輯問題。 你有:SqlBulkCopyOptions.KeepNulls&SqlBulkCopyOptions.KeepIdentity這兩個項的值是:
SqlBulkCopyOptions.KeepNulls = 8 = 00001000
SqlBulkCopyOptions.KeepIdentity = 1 = 00000001
布爾“&”運算符將兩個值放在一起(意味着保留二進制中常見的位)。 該操作的值導致零。 你真正想要的是一個OR:8 | 1 = 9
new SqlBulkCopy(ConfigurationManager.ConnectionStrings [“ConnectionDatabase2”]。ConnectionString,SqlBulkCopyOptions.KeepNulls | SqlBulkCopyOptions.KeepIdentity))
與英語措辭相比,布爾運算符有點落后:如果你想要KeepNulls並且想要KeepIdentity,那么你需要將這兩個值組合在一起。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.