簡體   English   中英

SQL查詢執行順序錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM