[英]SQL query execution order error
開始學習sql並遇到查詢問題。 我有-2個表的日歷和活動以及FK表的DateActivities。 有2個簡單的列表日歷以及日期和活動。 我希望能夠通過單擊按鈕在選定日期通過文本框輸入新活動。 但是,當我這樣做時,我得到一個查詢錯誤。 謝謝你的幫助。
private void btnAddToDate_Click(object sender, EventArgs e)
{
string query = "DECLARE @ActivitiesId TABLE (Id INT) " +
"INSERT INTO Activities (Name) " +
"OUTPUT INSERTED.ID INTO @ActivitiesId Id(Id) " +
"VALUES (@ActivitiesName) " +
"INSERT INTO DateActivities VALUES (@CalendarId, @ActivitiesId)";
using (connection = new SqlConnection(connectionString))
using (SqlCommand command = new SqlCommand(query, connection))
{
connection.Open();
command.Parameters.AddWithValue("@ActivitiesName", textDate.Text);
command.Parameters.AddWithValue("@CalendarId", listCalendar.SelectedValue);
command.ExecuteNonQuery();
}
FillCalendar();
FillActivities();
}
您正在嘗試執行多個語句,因此需要用;
分隔它們;
作為行終止符,如下所示,否則將其視為要執行的單個語句。 如果僅在SSMS中復制/粘貼語句塊,則會得到相同的錯誤。
"DECLARE @ActivitiesId TABLE (Id INT); " +
"INSERT INTO Activities (Name) " +
"OUTPUT INSERTED.ID INTO @ActivitiesId Id(Id) " +
"VALUES (@ActivitiesName); " +
"INSERT INTO DateActivities VALUES (@CalendarId, @ActivitiesId)"
您最好將它拉到存儲過程中,而不是作為即席查詢運行。
您要在DateActivities
的列值中插入整個表,這顯然是錯誤的,並且將失敗,您需要使用另一個變量來保存ActivityId
,然后接下來將其插入,如下所示:
"DECLARE @ActivitiesId TABLE (Id INT)
DECLARE @ActivityId INT " +
"INSERT INTO Activities (Name) " +
"OUTPUT INSERTED.ID INTO @ActivitiesId Id(Id) " +
"VALUES (@ActivitiesName) " +
"SELECT @ActivityId = Id from @ActivitiesId"
"INSERT INTO DateActivities VALUES (@CalendarId, @ActivityId)";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.