2016-06-21 103 views
1

我偶然發現了這樣的定義:在NOT NULL字段顯式使用「默認默認值」的MS SQL - 爲什麼?

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

我想不出有任何理由要添加這些默認值。非空字符串默認爲'',默認爲0。是否有定義這些默認值的原因?我錯過了什麼嗎?這是我不知道的一些最佳實踐手冊嗎?

我只是用:

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

數據庫是MS SQL Server 2012中,現在遷移到Azure數據庫。

+2

因爲'VARCHAR NOT NULL'沒有默認值''''。如果您沒有爲「NOT NULL」字段指定值,則會引發錯誤。沒有系統默認值。 – Siyual

+0

你是什麼意思「默認默認值」?沒有默認值,除非您選擇一些。如果有人'插入任何(txCity)值('hello');',這將適用於版本1,但不適用於沒有默認值的版本。 –

+0

如果您嘗試向該表中插入一行而未指定列的值,則會被阻止。如果沒有明確指定默認值,則不存在automagic默認值。 –

回答

1

例如,您從第一批問題創建表。然後插入這樣

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

值,您將獲得1排dbo.whatever

flBlahBlah txCity cdFrom 
1  

所以,如果你「忘記」在使用默認值的列確定一個插入 - SQL Server將照顧他們的。

這是非常有用的,當你有表,你需要插入新的領域。使用默認值確定您不需要更改SP /查詢的/其他與此表一起工作的東西。

+0

謝謝。出於某種原因,我認爲這會發生沒有默認值。現在我知道更好。 – vacip

+0

我的榮幸!我需要補充的是,如果您爲列確定NULL或NOT NULL,它只會告訴服務器是否允許在該列中使用NULL值,並且僅在確定該列並且未在查詢中插入時纔會粘貼默認值。另外''不等於NULL,它只意味着值是空的,NULL意味着沒有任何值。 – gofr1