2016-08-04 63 views
0

我想使用SQL精簡版在我的表上添加一列。它曾用於之前的工作,但我現在說錯誤更改表添加唯一列sql ce

重複的值不能插入唯一的索引。 [表名=最後的嘗試,約束名稱= UQ__final try__0000000000000228]

我使用C#,因爲我得到新的列名(使用文本框),並確定是否列是唯一的(複選框)。它曾經工作,然後突然不是。請幫忙!我的代碼有點亂。我很抱歉,這就是:

string constr = "ALTER TABLE "; 
if (textBox2.Text.ToString() != "") 
{ 
    constr += "[" + table + "] ADD [" + col1 + "]"; 
    if (comboBox2.Text == "text") 
    { 
     constr += " nvarchar(300)"; 
    } 
    else if (comboBox2.Text == "number") 
    { 
     constr += " int"; 
    } 
    else if (comboBox2.Text == "date") 
    { 
     constr += " datetime"; 
    } 
    if (checkBox1.Checked) 
    { 
     constr += " unique"; 
    } 
} 
cmd.CommandText = constr; 
cmd.ExecuteNonQuery(); 

constr輸出像

ALTER TABLE table ADD COLUMN column1 int unique 

請幫幫忙!謝謝!

編輯:

我發現我不能添加一列只有在數據網格視圖已經有內其數據。我該怎麼辦?幫幫我!謝謝!!!

+0

這個問題似乎都從DataGridView中,而不是ALTER TABLE SQL ... – Grace

+0

你可以在表列添加到表被填充,但不是當字段不是空或唯一時。當該字段不爲空時,你必須提供一個默認值,如果你希望它是唯一的,你必須添加沒有唯一的列,然後創建一個唯一的索引,允許在列創建後產生空值 – GuidoG

回答

0

我不熟悉sql服務器ce,但在普通sql server中使用唯一關鍵字創建一列意味着創建一個索引,其中沒有兩行可以有空值,因爲它們不是唯一的。

因此,您需要創建沒有唯一關鍵字的列,然後創建允許爲空的唯一索引。

您可以創建忽略這樣的空值的唯一索引:

CREATE UNIQUE NONCLUSTERED INDEX idx_col1 
ON dbo.MyTable(col1) 
WHERE col1 IS NOT NULL;