我想将具有不同值的相同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并插入表
答案 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);