2016-06-21 24 views
1

ich auf dieser Definition gestolpert:MS SQL verwendet explizit "default defaults" auf NOT NULL Feldern - warum?

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

ich nicht aus einem Grund, diese Standardwerte hinzufügen denken können. Eine Null-Null-Zeichenfolge wird standardmäßig auf '' gesetzt und das Bit wird standardmäßig auf 0 gesetzt. Gibt es einen Grund, diese Standardwerte zu definieren? Fehle ich etwas? Ist mir das in einem Best-Practice-Handbuch nicht bekannt?

Ich würde nur verwenden:

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

Die Datenbank in MS SQL Server 2012 jetzt auf Azure-Datenbank migrieren.

+2

Da 'VARCHAR NOT NULL' keinen Standardwert von' '' 'hat. Wenn Sie keinen Wert für ein 'NOT NULL'-Feld angeben, wird ein Fehler ausgegeben. Es gibt keinen Systemstandard. – Siyual

+0

Was meinst du mit "Standardeinstellungen"? Es gibt keine Standardeinstellungen, es sei denn, Sie wählen einige aus. Wenn jemand 'INSERT was auch immer (txCity) Werte ('hallo');' 'tut, funktioniert das mit Version 1, aber nicht mit Ihrer Version ohne die Standardwerte. –

+0

Wenn Sie versuchen, eine Zeile in diese Tabelle einzufügen, ohne einen Wert für eine Spalte anzugeben, werden Sie daran gehindert. Es gibt keinen automatischen Standardwert, wenn Sie keinen explizit angeben. –

Antwort

1

Zum Beispiel erstellen Sie Tabelle aus einer ersten Charge Ihrer Frage. Dann Wert legen wie dieses

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

Sie 1 Zeile erhalten dbo.whatever

flBlahBlah txCity cdFrom 
1  

Also, wenn Sie „vergessen“, bestimmt in einem der Spalte einzufügen mit Standardwerten - SQL Server wird sie kümmern .

Es ist sehr nützlich, wenn Sie einen Tisch haben, in dem Sie ein neues Feld einfügen müssen. Wenn der Standardwert festgelegt ist, müssen Sie SP/query/andere Sachen, die mit dieser Tabelle arbeiten, nicht ändern.

+0

Danke. Aus irgendeinem Grund dachte ich, dass dies auch ohne Standardwerte passieren würde. Jetzt weiß ich es besser. – vacip

+0

Mein Vergnügen! Ich muss hinzufügen, dass, wenn Sie NULL oder NOT NULL für Spalte bestimmen, teilt es Server nur, wenn NULL-Wert in dieser Spalte zulässig ist, und Standardwert wird nur eingefügt, wenn für diese Spalte bestimmt und nicht in Abfrage eingefügt. Auch '' ist nicht gleich NULL, es bedeutet nur, dass der Wert leer ist, NULL bedeutet, dass es keinen Wert gibt. – gofr1