更改表以添加唯一列sql ce

时间:2016-08-04 09:16:02

标签: c# winforms datagridview sql-server-ce

我正在尝试使用SQL Compact Edition在我的表上添加一列。以前它曾经工作但我现在收到一个错误

  

无法将重复值插入唯一索引。 [表名=最终尝试,约束名称= UQ__最终尝试_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

请帮忙!谢谢!

修改

我发现只有在数据网格视图中已包含其数据时才能添加列。我该怎么办?救命!感谢!!!

1 个答案:

答案 0 :(得分:0)

我不熟悉sql server ce但是在普通的sql server中创建一个带有unique关键字的列意味着创建一个索引,其中没有2行可以在其中包含null,因为它们不是唯一的。

所以你需要创建没有unique关键字的列,然后创建一个允许null的唯一索引。

您可以创建一个忽略空值的唯一索引,如下所示:

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