1

我有一张桌子

ProjectID
ProjectName
Project description

项目名称必须是唯一的。为了实现独特的逻辑,我将项目名称的名称发送到存储过程

Create proc CheckName
@Project Name
as
begin
select count(ProjectName)
where ProjectName=@Project Name

它返回计数到 CS 页面,我检查一下 if(count>0) { //Add }

此代码适用于添加。现在,当我想更新项目描述字段时,再次检查项目名称并返回 Count 1(这很明显)并显示项目名称已存在,我无法更新表的其他字段。

可以实现哪些其他逻辑来维护表中的唯一字段。感谢您的任何帮助。

4

2 回答 2

2

为什么不在ProjectName列上添加唯一约束?ProjectID 设为主键,并在其上放置身份种子,使其自动递增。这也会自动将聚集索引添加到 ProjectID 列。此外,将数据库的排序规则设置为 LATIN1_GENERAL_CI_AI,以便数据库以不区分大小写的方式比较 ProjectName 列值。如果需要区分大小写的比较,可以将排序规则设置为 LATIN1_GENERAL_CI_AS。要将唯一键约束添加到 ProjectName 列,只需执行以下操作:

ALTER TABLE PROJECT ADD CONSTRAINT
            UX_PROJECT_NAME UNIQUE NONCLUSTERED
    (
                PROJECTNAME
    )

现在您需要做的就是更新或插入,如果插入/更新重复的项目名称,则会抛出异常,您可以捕获并处理。

于 2013-01-30T17:35:36.663 回答
0

当您希望特定字段唯一时,实现记录更新的示例

 string connectionstring = WebConfigurationManager.ConnectionStrings[""].ConnectionString;
            SqlConnection con = new SqlConnection(connectionstring);
            SqlCommand cmd = new SqlCommand("InsertEmployee", con);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add("@Id", SqlDbType.Int, 4);
            cmd.Parameters["@Id"].Value = Convert.ToInt32(TextBox1.Text);
            cmd.Parameters.Add("@EmpName", SqlDbType.NVarChar, 50);
            cmd.Parameters["@EmpName"].Value = Convert.ToString(TextBox2.Text);
            cmd.Parameters.Add("@Salary", SqlDbType.Decimal);
            cmd.Parameters["@Salary"].Value = Convert.ToDouble(TextBox3.Text);
            try
            {
                con.Open();
                cmd.ExecuteScalar();
                con.Close();
            }
            catch (Exception ex )
            {
                if (ex.Message.Contains("UNIQUE KEY constraint"))
                Lblmessage.Text = "Field already exist";
            }
于 2013-02-04T06:52:31.263 回答