2016-08-04 3 views
0

SQLコンパクトエディションを使用してテーブルに列を追加しようとしています。それ以前は動作していましたが、エラーが発生しましたユニークな列を追加するためのテーブルの変更SQLの

重複する値を一意のインデックスに挿入できません。 [テーブル名=最後の試み、制約名= 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

テーブルは、テーブルに列を追加することができますフィールドがNULLでないか、またはユニークでないときには、埋められません。フィールドがヌルでない場合は、デフォルト値を指定する必要があります。ユニークであるようにするには、カラムをユニークに追加してから、カラム作成後にヌルを許可するユニークなインデックスを作成する必要があります – GuidoG

答えて

0

私はSQL Server CEに精通していませんが、通常のSQL Serverではuniqueキーワードを使用して列を作成するということは、一意ではないため2行にnullを持たないインデックスを作成することを意味します。

したがって、uniqueキーワードなしで列を作成し、後でnullを許可するユニークなインデックスを作成する必要があります。

あなたはこのようなNULL値を無視し、一意のインデックスを作成することができます

CREATE UNIQUE NONCLUSTERED INDEX idx_col1 
ON dbo.MyTable(col1) 
WHERE col1 IS NOT NULL; 
関連する問題