从上一个表中选择值,递增它并将其插入新表中

时间:2015-04-10 09:38:14

标签: sql sql-server

我是为我的学者做这个项目的新手。我有一个标识列slno。 我需要从上一行中选择EmpID并将其递增1并将其添加到具有以下内容的新行。但我不知道如何实现这一目标。

P.S:我评论了EmpID字符串格式。

protected void Button1_Click(object sender, EventArgs e)
{
   using(SqlCommand cmd = new SqlCommand("Insert into Emplo ([Name],[Password],[Designation],[Dept],[D O B],[Sex],[Address]) values (@Name,@pass,@des,@dept,@DOB,@Sex,@Address)", con))
    {
        cmd.Parameters.Add("@Name", SqlDbType.VarChar).Value = TextBox1.Text;
        cmd.Parameters.Add("@des", SqlDbType.VarChar).Value = TextBox2.Text;
        cmd.Parameters.Add("@dept", SqlDbType.VarChar).Value = TextBox3.Text;
        cmd.Parameters.Add("@DOB", SqlDbType.SmallDateTime).Value = TextBox4.Text;
        cmd.Parameters.Add("@Sex", SqlDbType.VarChar).Value = RadioButton1.SelectedItem.Text;
        cmd.Parameters.Add("@Address", SqlDbType.VarChar).Value = TextBox5.Text;
        cmd.Parameters.Add("@pass", SqlDbType.VarChar).Value = CreateRandomPassword(6);
        con.Open();
        cmd.ExecuteNonQuery();
        Response.Write("<script>alert('Registered successfully......!')</script>");
    }
    //String result = String.Format("a{0:0000}", i);
    //Response.Write("<script>alert('Your Employee ID is  " + Server.HtmlEncode(result.ToString()) + "')</script>");
con.Close();
}

2 个答案:

答案 0 :(得分:1)

这与c#无关,至少根据你的代码也没有与MySql有任何关系,你使用的是SQL Server而不是MySql。 您可以将EmpId设置为标识列。

在我们在评论中的谈话之后,我回到了SQL Fiddle并玩了大约3分钟,想出了这个:

创建表格:

CREATE TABLE T (
    EmpId int IDENTITY(1,1),
    EmpName char(3)
)

插入样本数据

INSERT INTO T(EmpName) VALUES ('abc'), ('def'), ('ghi')

选择中的格式化EmpId:

SELECT EmpId, 
       EmpName, 
       RIGHT(REPLICATE('0', 5) + CAST(EmpId as varchar(5)), 5) As FormattedEmpId
FROM T;

在Where:

中使用Formatted EmpId
DECLARE @EmpId nvarchar(5)
SET @EmpId = '00002'

SELECT EmpId, EmpName
FROM T
WHERE EmpId = CAST(@EmpId as int)

正如您所看到的,EmpId存储为int标识列,您可以在select子句中使用纯t-sql对其进行操作,使其看起来像前导零,并使用where子句来转换字符串使用前导零到简单的int值。

我建议在你正在编写的c#软件中格式化EmpId,因为显示问题不是数据库的工作,但正如你所看到的那样绝对可能。

在此处查看:http://sqlfiddle.com/#!6/d9819/11

答案 1 :(得分:0)

这就是我用的!我不知道sql存储过程,所以我无法判断@zohar peled给出的答案是否正确。

下面是我用来获取前一行值(字母数字)并将其递增1的代码 using (SqlCommand cnd = new SqlCommand("SELECT TOP 1 EmpId FROM Emplo ORDER BY EmpId DESC", con)) { string x =Convert.ToString(cnd.ExecuteScalar()); string justNumbers = new String(x.Where(Char.IsDigit).ToArray()); int numbers = Convert.ToInt32(justNumbers); numbers = numbers + 1; resul = string.Format("a{0:0000}", numbers); Response.Write("<script>alert('Your Employee ID is " + Server.HtmlEncode(resul) + "')</script>");//to display generated EmpID }
结果是全局声明的,以便我可以在插入语句中使用它 在&#39; a&#39;

的位置添加您需要的字母