2016-06-21 5 views
1

私は、この定義につまずい:NOT NULLフィールドで "default defaults"を明示的に使用しているMS SQL - なぜですか?

CREATE TABLE dbo.whatever (
    [flBlahBlah] BIT   DEFAULT ((0)) NOT NULL, 
    [txCity]  NVARCHAR (50) DEFAULT ('') NOT NULL, 
    [cdFrom]  VARCHAR (10) DEFAULT ('') NOT NULL 
); 

私はそれらのデフォルト値を追加するための理由を考えることはできません。 NOT NULL文字列のデフォルトは''で、ビットのデフォルトは0です。これらのデフォルト値を定義する理由はありますか?何か不足していますか?これは私が気づいていないベストプラクティスのハンドブックにありますか?

私はちょうど使用したい:

CREATE TABLE dbo.whatever (
    [flBlahBlah] BIT   NOT NULL, 
    [txCity]  NVARCHAR (50) NOT NULL, 
    [cdFrom]  VARCHAR (10) NOT NULL 
); 

データベースは現在、Azureデータベースへの移行、MS SQL Server 2012のです。

+2

'VARCHAR NOT NULL'のデフォルトは' '' 'ではないためです。 'NOT NULL'フィールドに値を指定しないと、エラーがスローされます。システムのデフォルトはありません。 – Siyual

+0

「デフォルトのデフォルト」とはどういう意味ですか?あなたが何かを選択しない限り、デフォルトはありません。誰かが '何か(txCity)の値( 'hello');'を実行すると、バージョン1では動作しますが、デフォルトなしではバージョンでは動作しません。 –

+0

列の値を指定せずにそのテーブルに行を挿入しようとすると、その行が防止されます。明示的に指定しないと、自動化されたデフォルト値はありません。 –

答えて

1

たとえば、質問の最初のバッチからテーブルを作成します。 SQL Serverは、それらの世話をする - そして、この

INSERT INTO dbo.whatever (flBlahBlah) VALUES (1) 

のように値を挿入あなたが決定したデフォルト値を持つ列のいずれかに挿入するために「忘れる」のであればdbo.whatever

flBlahBlah txCity cdFrom 
1  

1行を取得します。

新しいフィールドを挿入する必要があるテーブルがある場合は非常に便利です。デフォルト値では、このテーブルで動作するSP /クエリ/その他のものを変更する必要はありません。

+0

ありがとうございます。何らかの理由で、私はこれもデフォルト値なしでも起こると思っていました。今私はよく知っている。 – vacip

+0

私の喜び!私はそれを追加する必要がある場合はNULLまたはNULLのNOT NULLを決定する場合は、単にNULL値がその列で許可されていると、サーバーに通知し、その列に対して決定され、クエリに挿入されていない場合、また、 ''がNULLと等しくない場合は、値が空であることを意味し、NULLは値が存在しないことを意味します。 – gofr1

関連する問題