[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 演算子を使用しますが、ビットごとに行うため、必要な動作が得られます。TableLock
0x01
0x04
バイナリで:
00000001
00000100 OR
--------
00000101
1 番目と 3 番目のビットがどのようになっているのかを観察します1
。
したがって、(KeepIdentity | TableLock == 5
)。
このアプローチは、2 のべき乗ではない列挙値には機能KeepIdentity
し1
ませCheckConstraints
ん。2
TableLock
3
00000001 KeepIdentity
00000010 CheckConstraints
00000011 TableLock
のビットを分析しても、これがとの組み合わせなのか、単一の値00000011
なのかを判断できないことに注意してください。1. 2 の累乗、および 2: 相互に排他的 (省略形と組み合わせ値は例外)。KeepIdentity
CheckConstraints
TableLock