SQL 服务器 CE 无法识别 DECLARE、BEGIN、COMMIT

SQL Server CE doesnt recognize DECLARE, BEGIN, COMMIT

我试图在单个查询中的两个 table 中插入数据。第二个 table 需要第一个的 scope_identity() 值。

我的查询是:

 String query = "DECLARE @questionID int;
            INSERT INTO question (questionText) VALUES(@question);SELECT @questionID = scope_identity();
            INSERT INTO topic_question(toppicID,questionID) VALUES(@topic,@questionID);";

执行为:

SqlCeCommand commandInsert = new SqlCeCommand(query, connection);
commandInsert.Parameters.AddWithValue("@question", question);
commandInsert.ExecuteScalar();

收到一条错误消息:

There was an error Parsing the query.Token Line number =1, Token line offset =1, Token in error = DECLARE. ..........

我尝试在查询开头使用 BEGIN TRANSACTION,在查询最后使用 COMMIT。但仍然存在错误。任何人都可以请注意,我做错了什么?

您不能在 SQL Server CE 中声明变量并且每个命令只允许一个语句。

所以你必须拆分你的语句并像这样一个一个地执行它:

SqlCeCommand cmd = new SqlCeCommand("INSERT INTO question (questionText) VALUES(@question)", connection);
cmd.Parameters.AddWithValue("@question", question);
cmd.ExecuteNonQuery();

cmd.CommandText = "select @@IDENTITY";
cmd.Parameters.Clear();
var id = cmd.ExecuteScalar();

cmd.CommandText = "INSERT INTO topic_question(toppicID,questionID) VALUES(@topic,@questionID);"
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@topic",.....);
cmd.Parameters.AddWithValue("@questionID", id);
cmd.ExecuteNonQuery();

请注意,您必须在第一次调用 cmd.ExecuteNonQuery(); 后保持连接打开(不要关闭它),以便 select @@identity 工作。