2015-04-07 54 views
1

我試圖在單個查詢中的兩個表中插入數據。第二個表格要求第一個值爲scope_identity()SQL Server CE不承認DECLARE,BEGIN,COMMIT

我的查詢是:

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(); 

得到的錯誤消息:

發生錯誤解析query.Token行號= 1 ,令牌行偏移量= 1,令牌出錯= DECLARE。 ..........

我使用的查詢開始BEGIN TRANSACTIONCOMMIT在最後一次查詢的嘗試。但仍然存在錯誤。任何人都可以請注意,我做錯了什麼?

+0

SQL CE具有精簡指令集;聽到這不被支持,我不會驚訝:https://msdn.microsoft.com/en-us/library/ms173372.aspx –

回答

1

您不能在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工作。

+0

偉大的答案安迪。不知道CE沒有這個功能。 – Shasi