将具有不同值的相同ID插入到数据库

时间:2017-01-19 02:50:17

标签: c# asp.net

我想将具有不同值的相同id插入到数据库中。基本上,它是一种允许用户添加一些标准的新奖学金的表格。并非所有奖学金都适用于所有课程。因此,将有两个表格,scholarship将获得新的奖学金,scholarshipCourse将处理课程的资格。

我想同时插入两个数据。用户按提交的位置,scholarship表中的奖学金ID将自动递增,而scholarshipcourse表将获取新的奖学金ID并插入

例如:

scholashipCourse

scholarship_id    course
-------------------------
    1             math
    1             english
    2             english
    2             science

scholarship

scholarship_id     scholarshipName 
--------------------------------------
      1            moon scholarship
      2            star scholarship
      3            light scholarship

假设scholarship_id 3是新增的奖学金,我如何获得该ID并同时插入奖学金课程表。

我可以使用这个select语句:

INSERT INTO user (name) 
VALUES ('John Smith');

INSERT INTO user_details (id, weight, height)
VALUES (SELECT(id FROM user WHERE name = 'John Smith'), 83, 185); 

但是如何获取刚刚添加的最新ID?

我需要插入我的DAL,如:

public DataTable测试(字符串名称,字符串过程)         {

        SqlCommand cmd = new SqlCommand();
        SqlConnection myConnection = new SqlConnection(strConnectionString);

        cmd.Connection = conn;
        cmd.CommandText = "INSERT INTO Table1(schName)  values (@schName)";
        cmd.Parameters.AddWithValue("@schName", name);
        conn.Open();
        int i = cmd.ExecuteNonQuery();
        int id = (int)cmd.ExecuteScalar();

        cmd.CommandText = "Select SCOPE_IDENTITY();INSERT INTO Table2(ScholarshipID,DiplomaCourse) values (@id,@course)";
        cmd.Parameters.AddWithValue("@id", id);
        cmd.Parameters.AddWithValue("@course", course);


        SqlDataAdapter da = new SqlDataAdapter();
        da.SelectCommand = cmd;
        DataTable dt = new DataTable();
        da.Fill(dt);
        return dt;

    }

它已成功添加到两个表中,但它不检索最后一个id并插入表

3 个答案:

答案 0 :(得分:1)

SCOPE_IDENTITY是一种可能的解决方案。

SCOPE_IDENTITY的说明: https://msdn.microsoft.com/en-us/library/ms190315.aspx

基本上你插入奖学金表并获得id(使用SCOPE_IDENTITY)。然后,使用该id,您可以插入scholarshipCourse表。这样的事情(根据您的奖学金表名称):

DECLARE @id INT
INSERT INTO scholarshipCourse (course) VALUES ('humanities')
SELECT @id = SCOPE_IDENTITY() --RETRIEVES THE LAST INSERTED ID IN THIS SCOPE
INSERT INTO scholarship (scholarship_id, scholarshipName) VALUES (@id, 'star scholarship')

答案 1 :(得分:0)

您可以使用OUTPUT子句捕获新插入记录的值,包括标识值:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="area">
  <button>Plus One</button>
</div>

INSERT INTO user (name) OUTPUT INSERTED.ID VALUES ('John Smith'); 语句将生成一个结果集,其中包含每个插入记录的ID(在上例中,单行)。您可以像查询一样执行命令(例如,使用INSERT插入单行时)。

答案 2 :(得分:0)

只需用scope_identity函数替换内联select语句。

INSERT INTO user (name) VALUES ('John Smith');
INSERT INTO user_details (id, weight, height) VALUES (scope_identity(), 83, 185);

如果要插入多个详细信息行 您可以声明变量并将其值设置为scope_identity

INSERT INTO user (name) VALUES ('John Smith');
declare @id int
select @id=scope_identity()
INSERT INTO user (name) VALUES ('John Smith');
INSERT INTO user_details (id, weight, height) VALUES (@id, 83, 185);
INSERT INTO user_details (id, weight, height) VALUES (@id, 84, 186);