[Flags]属性があり、互いに独立した列挙値を持つ場合、列挙型をフラグとして使用できます。
の定義SqlBulkCopyOptionsはこちら: https://github.com/Microsoft/referencesource/blob/master/System.Data/System/Data/SqlClient/SqlBulkCopyOptions.cs
ビットシフト構文の使用を無視します。実際の値は次のとおりです。
Name Hex Dec Pow 2 Binary
Default = 0 = 0 = 0 = 00000000
KeepIdentity = 1 = 1 = 1 = 00000001
CheckConstraints = 2 = 2 = 2 = 00000010
TableLock = 4 = 4 = 3 = 00000100
KeepNulls = 8 = 8 = 4 = 00001000
FireTriggers = 10 = 16 = 5 = 00010000
UseInternalTxn = 20 = 32 = 6 = 00100000
各値が次の 2 の累乗であることに注意してください。つまり、バイナリ (最後の列) では、それらのビットは完全に相互に排他的です。
これは、各値が設定されていることを確認できる方法でそれらを組み合わせることができることを意味KeepIdentityします。OR 演算子を使用しますが、ビットごとに行うため、必要な動作が得られます。TableLock0x010x04
バイナリで:
00000001
00000100 OR
--------
00000101
1 番目と 3 番目のビットがどのようになっているのかを観察します1。
したがって、(KeepIdentity | TableLock == 5)。
このアプローチは、2 のべき乗ではない列挙値には機能KeepIdentityし1ませCheckConstraintsん。2TableLock3
00000001 KeepIdentity
00000010 CheckConstraints
00000011 TableLock
のビットを分析しても、これがとの組み合わせなのか、単一の値00000011なのかを判断できないことに注意してください。1. 2 の累乗、および 2: 相互に排他的 (省略形と組み合わせ値は例外)。KeepIdentityCheckConstraintsTableLock