是否可以在一个VALUES条目中包含多个SQL命令?

时间:2015-05-07 01:37:03

标签: c# sqlite subquery

是否可以先插入一个条目(如果不存在),然后在一个VALUES条目中检索该值?

这样的事情:

INSERT INTO Sections(data) VALUES(
    (INSERT OR IGNORE INTO Courses(column) WHERE column='test'
    SELECT id FROM Courses WHERE column='test')
)

所以首先我插入一个值,如果不存在于从其他表中引用值的Section中。它可能不存在,所以我想插入它然后我想抓住新课程条目的'id'。

有可能吗?

1 个答案:

答案 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();
}