2011-08-28 42 views
0

我有一個sybase數據庫表,其中我需要添加一個新的列。如何在sybase中添加唯一列?

條件:列不允許有空值並且是唯一的。 什麼是alter table sql來實現這個目標?

編輯: 這是一個varchar類型column.Yes表截至目前是空的,但在填充時,確保了獨特的價值將被填充

我累了執行

alter table Test add Name varchar not null unique 

我得到錯誤,說默認值必須指定爲不是空的給出。 但我想添加獨特的約束,所以我真的需要指定默認?

感謝

+1

此鏈接是否有幫助? http://stackoverflow.com/questions/4133186/adding-columns-to-a-sybase-table-with-unique-auto-identity-index-option –

+1

表中已經有多少行?什麼是列的類型?你將如何爲每個已經存在的行分配唯一的值? –

+0

編輯了這個問題.. – jch

回答

3

唯一值被指定爲在列的索引,而不是在列定義本身的一部分。

嘗試:

alter table Test add Name varchar not null 
create unique index index_name_unique on Test (Name) 

ASE reference manual可以用更詳細的幫助。

2

創建表後,Sybase ASE不允許直接添加NOT NULL列,除非爲該列指定了缺省值。但是,如果表仍然是空的,你可以做以下 -

  1. 首先爲NULL列使用alter table命令添加新列到表 -

ALTER TABLE測試添加名稱VARCHAR( 100)空

  1. 一旦這樣做了,請嘗試使用ALTER TABLE腳本修改同一列名在表測試 -

alter table測試修改名稱varchar(100)NOT NULL

並且您將看到可以使用這些步驟將Name列修改爲NOT NULL列。這是因爲此時Sybase服務器檢查表中沒有數據,因此不檢查NOT NULL約束並且將列設置爲NOT NULL。因此,我們可以跳過默認約束。

如果Test表中已經存在一些數據,那麼我們需要在步驟1和步驟2之間再添加一個步驟,這會將缺省值添加到表中的現有行。這可以通過對以往數據的腳本來完成,然後按照步驟2

爲了讓列只允許唯一值,你需要使用下面的語法添加一個唯一鍵約束列 -

ALTER表測試添加約束UK1唯一(名稱)

相關問題