2014-01-20 86 views
2

在Azure SQL數據庫管理門戶中,我嘗試將新列添加到包含行的現有表中。Azure SQL數據庫管理門戶 - 默認列值

New column

我添加了默認值 - 0 - 以爲這樣就默認添加到現有行,因此將列設置爲「是必需的」(不可爲空)會確定。然而,當我試圖挽救,我得到了錯誤:

ALTER TABLE only allows columns to be added that can contain nulls, or have a DEFAULT definition specified, or ...

我可以然而執行下面的SQL語句:

ALTER TABLE Sales 
ADD Purchase int NOT NULL 
CONSTRAINT PurchaseDefault DEFAULT 0 

當我在餐桌上又在蔚藍望去,只見那默認值了((0))

enter image description here

因此,在下一欄,我不得不補充我試圖把默認的雙括號((0)),但那也沒用。

所以,我去了我的開發機器上的SQL Server Management Studio 2012。在這裏,我可以在'默認值或綁定'選項中添加一個帶有0的新列。這工作。有趣的是,當我回到0時,((0))。

所以,我的問題是: -

  1. 如何在Azure中的默認值列從添加默認約束有什麼不同?
  2. 爲什麼在SQL Server 2012中可以正常使用,但不能使用Azure?
  3. 什麼是(())?我試着用谷歌搜索'雙括號/大括號默認約束'的各種組合,但空了。
+0

我新的SQL Azure的,並使用Web GUI也遇到相同問題。任何人有答案? –

回答

0

我想你遇到的是正確的。我不是DBA,但讓我試着解釋一下我現在知道的東西。

  1. 如果使用SQL Server Management Studio中(SSMS)指定默認值,它將被括號自動換行。如果您的默認值是一個靜態值,例如零,則它將是((0)),如果它是某個計算值(例如當前日期/時間),則它將是(GETDATE())。但我不敢肯定爲什麼它必須包裹(雙)括號

  2. 我想你的SQL Azure中有一些現有的記錄。您對... it would add the default to existing rows ...的理解不正確。默認值不會影響現有記錄。如果不明確指定,它將只將該值設置爲默認值。這就是在SQL Azure中應用更改時出現錯誤的原因。我想你需要運行一個腳本來爲所有現有記錄的這個列設置默認值,然後應用這個改變。像UPDATE [Your_Table] SET [Purchase] = 0 WHERE [Purchase] IS NULL

希望這有助於

+0

感謝您的回答。當我在我的問題中使用T-SQL Alter Table語法時,默認約束正常工作。默認約束與列的默認值之間有什麼區別? – acarlon

+0

對不起,我從來沒有使用默認約束。也許別人可以幫助你。 ;) –

+0

好的,沒問題。 – acarlon