私はこれを短くて甘いものにします。私は既存のテーブルにタイプrowversion
の列を追加しようとしています。私の考えでは、それをNULL
として追加すると、既存の行にはタイムスタンプが付きませんでした。これが振る舞いであれば、どのような状況で列に空値が認められますか?テーブルにnull可能なrowversion列を追加する
答えて
あなたがNULLとして設定している場合でも、rowversion値を取る:
CREATE TABLE MyTest (myKey int PRIMARY KEY, myValue int);
GO
INSERT INTO MyTest (myKey, myValue) VALUES (1, 0);
GO
INSERT INTO MyTest (myKey, myValue) VALUES (2, 0);
GO
SELECT * FROM MyTest;
GO
ALTER TABLE MyTest ADD rv rowversion NULL;
GO
SELECT * FROM MyTest;
GO
DROP TABLE MyTest;
+-------+---------+------------+
| myKey | myValue | rv |
+-------+---------+------------+
| 1 | 0 | 0000020331 |
+-------+---------+------------+
| 2 | 0 | 0000020332 |
+-------+---------+------------+
ここでそれを確認してください:http://rextester.com/ENELE48783
はい。私は質問の声明で多くを言った。私の質問です:彼らはそれがnullable型にするオプションを与える場合、nullableとnullableの間の機能的な違いは何ですか? –
を、彼らはあなたにそれNULL可能タイプ作るのオプションを与える場合は、何ですかnullableとnullの間の機能的な違いはありません。
実際には機能的な違いはありません(ただし、 下記参照)。 rowversion
列にNULL
を挿入することはできません。
INSERT
ステートメントのrowversion
列にNULL
を指定しても、サーバーは生成されたNULL以外の値を挿入します。 rowversion
列(NULL
またはNOT NULL
)を宣言した方法に関係なく、このように機能します。
回だけdocs言及のNULL可能rowversion
:
nonnullable
rowversion
列がbinary(8)
列と意味的に等価です。 null可能なrowversion
列は、意味的に列に相当する です。
あなたはそれが(実際には起こり得ない)可能性NULL
値の記憶を可能にするために、ディスク上の多くのスペースを占有する必要がありrowversion
NULL可能を指定した場合。各NULL可能列は、オーバーヘッドが発生し、参照:How much size "Null" value takes in SQL Server
がNULL可能列を有するためのオーバーヘッドもあるヌル値を格納するのに必要なスペースに加えて。
さらに、varbinary(8)
は、値の長さを格納するために、binary(8)
よりもディスク上のスペースが必要です。
これまで述べてきたように、それぞれ10M行の2つのテーブルを作成しようとしました。 1つはNULL可能なrowversion
列、2番目はnull不可能なrowversion
列です。私のテストでは、両方のテーブルがまったく同じ量のディスクスペースを占めていました。私はSQL Server 2014 Expressをテストしました。
私はこれを恐れていました。私がしようとしていたのは、SQL Serverの動作を使用して、その列を追加するためのメタデータ操作としてNULL可能な列を追加することでした。代わりに、それは列のNULL可能性に関係なく、それは "データのサイズ"操作のままです。バマー。見てくれてありがとう! –
"' varbinary(8) 'は' varbinary(8) 'を持っていて、1バイトのバイナリ値しか挿入しないと、それはどれくらいの大きさですか?ドキュメントによると、値の長さ+ 2バイトなので、3バイトになります。 'binary(8)'は常に8バイトです。あなたが引用したもう一つの質問は、 "フィールドが可変幅の場合、NULL値はスペースを必要としません"とし、 "カラムをヌル可能にするためにストレージスペースに何か費用がかかることは本当ですが、値を格納するのに必要なスペース(可変幅の列の場合)よりもNULLを格納するスペース。 – Davos
NULLを挿入できない場合、NULLABLE ROWVERSIONを指定すると、8バイトより小さいrowversion値が挿入されたときに空き領域が少なくなる可能性があります。そうでない場合は、無意味なように見えます。あなたは常にヌル可能ではないものを使うべきですが、私は確信していません。テストでディスクサイズをどのように比較しましたか?たぶん、ページサイズは同じですが、ページがいっぱいになったり、似たようなものがあります。 – Davos
- 1. null可能な外部キーの追加。
- 2. 列を追加しないSQL Serverのrowversion
- 3. Null可能型へのメソッドの追加
- 4. null不可能な列のUNIONはNULL可能です
- 5. 観測可能な配列に.joinを追加する
- 6. EditTextに編集不可能な文字列を追加する
- 7. SSRSレポートにトグル可能な追加情報を追加する
- 8. グループNULL可能な列によって
- 9. カスタムクリック可能なボタンを追加する
- 10. は、SQLテーブルのスクリプトに非NULL列を追加します - エラー
- 11. 戻るNULL可能列タイプ
- 12. DataTables、編集可能な列を追加する
- 13. クリック可能なSPANを含むセルをテーブルに追加する方法
- 14. EF4 null不可能な値へのnull可能な10進数の列のマッピング
- 15. Tableau:データソースフィールドドメインに可能な値を追加
- 16. sqlserverテーブルの列を変更して 'NULLでない'制約を追加する
- 17. 観測可能な配列に要素を追加typescript
- 18. 動的行を追加するブートストラップ編集可能テーブル
- 19. null可能な列からnotl NULL列を含むSQLビューを作成する
- 20. nullを追加しますSQL内の既存のテーブルの列
- 21. null可能な列挙型へのキャスト
- 22. C#null不可能な配列
- 23. Jpaコンポジットキーのnull可能な列
- 24. SQL結合可能なNULL列
- 25. Entity Frameworkの非NULL可能列がNULL可能エンティティプロパティ
- 26. Null可能なDateTime?
- 27. Alembic:IntegrityError:nullを許可しない列を追加するときに「列にnull値が含まれています」
- 28. Silverstripe adminのメンバーリストにソート可能な列を追加するには?
- 29. イメージをUIButtonに追加するとクローズ不可能になる
- 30. クラスをテーブル列に追加する
'rowversion'は単なるシステム内部のバイナリカウンタです。既存の行に対してその列の値を持つのはどうですか? –
私のテストでは、CREATE TABLE構文との互換性を除けば、これを許すことは全く無意味だと思われます。おそらくsybaseの遺産の遺産です。 http://sqlfiddle.com/#!6/6ea10 – Davos