是否可以先插入一个条目(如果不存在),然后在一个VALUES条目中检索该值?
这样的事情:
INSERT INTO Sections(data) VALUES(
(INSERT OR IGNORE INTO Courses(column) WHERE column='test'
SELECT id FROM Courses WHERE column='test')
)
所以首先我插入一个值,如果不存在于从其他表中引用值的Section中。它可能不存在,所以我想插入它然后我想抓住新课程条目的'id'。
有可能吗?
答案 0 :(得分:1)
SQLite是一个嵌入式数据库;它旨在与“真实”一起使用。编程语言,可以完成所有逻辑。
首先执行SELECT,然后根据需要执行INSERT。
如果id
列是INTEGER PRIMARY KEY,您可以使用last_insert_rowid获取其值:
using (SqlTransaction tx = connection.BeginTransaction())
{
string sql = "SELECT id FROM Courses WHERE column = @Name";
SqlCommand cmd = new SqlCommand(sql, connection);
cmd.Parameters.Add("@Name", SqlDbType.VarChar);
cmd.Parameters["@Name"].Value = ...;
Object id = cmd.ExecuteScalar();
if (id == null)
{
sql = "INSERT INTO Courses(Name) VALUES(@Name)";
SqlCommand cmd = new SqlCommand(sql, connection);
cmd.Parameters.Add("@Name", SqlDbType.VarChar);
cmd.Parameters["@Name"].Value = ...;
cmd.ExecuteNonQuery();
id = cmd.ExecuteScalar("SELECT last_insert_rowid()");
}
tx.Commit();
}