【问题标题】:SQL syntax near WHERE?WHERE 附近的 SQL 语法?
【发布时间】:2011-05-17 13:48:36
【问题描述】:

我是这里的新手,可能是因为我从昨天早上就起床了,但是我在这个插入语句中找不到我的错误。我的处理程序要求我不要为这个培训项目参数化(它不会被部署),所以不用担心注入漏洞。反正查询是对的,数据类型正确,表名和字段名拼写正确。我在这里想念什么?有没有更好的方法来找到它,而不是盯着屏幕直到它出现?

protected void BtnSubmit_Click(object sender, EventArgs e)
{
    string x = Request.QueryString["SubId"];
    string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
    string comQuery = "INSERT INTO Submission (Status, StatusComment, StatusValue) VALUES ('" + "decline" + "', '" + TbComments.Text + "', 2) WHERE SubmissionId =" + x;
    using (SqlConnection sqlConn = new SqlConnection(connectionString))
    {
        sqlConn.Open();
        using (SqlCommand comCmd = new SqlCommand(comQuery, sqlConn))
        {
            comCmd.ExecuteNonQuery();
        }
    }
}

【问题讨论】:

    标签: c# asp.net sql-server visual-studio


    【解决方案1】:

    INSERT 不能有 WHERE 子句。拥有一个是没有意义的,你是在输入数据,而不是缩小范围。

    如果您尝试更改预先存在的数据,那是UPDATE,而不是INSERT。这是一个例子:

    "UPDATE Submission
     SET Status='decline', StatusComment='" + TbComments.Text + "', StatusValue = 2
     WHERE SubmissionId = " + x
    

    【讨论】:

      【解决方案2】:

      这是不正确的 INSERT 语法。正确的 INSERT 语法是:

      INSERT INTO tableName (columnList) VALUES (valueList)
      

      columnListvalueList 必须具有相同的项目数,并且值必须是列所期望的类型。

      INSERT INTO tableName (columnList)
      SELECT columnList2
      FROM tableName2
      WHERE conditionsFromTable2
      

      columnListcolumnList2 必须具有相同类型的项目的相同计数。您可以使用任何复杂的选择连接多个表,并将条件应用于这些表中的数据。

      【讨论】:

        【解决方案3】:

        您需要使用 UPDATE,而不是 INSERT INSERT 插入新行,因此 WHERE 没有意义

        【讨论】:

          【解决方案4】:

          插入查询中不允许使用 Where 子句。形成你的代码我猜你需要使用更新查询。

          【讨论】:

            【解决方案5】:

            您正尝试从 TbComments 插入提交数据。所以你需要从 TbComments 中选择数据,然后 INSERT INTO 提交

            string comQuery = 
            "INSERT INTO Submission (
                 Status, 
                 StatusComment, 
                 StatusValue) 
             SELECT 
                'decline', 
                TbComments.Text, 
                2) 
             FROM TbComments 
             WHERE SubmissionId =" + x;
            

            【讨论】:

              【解决方案6】:

              所以你的 SQL 语句是: "INSERT INTO Submission (Status, StatusComment, StatusValue) VALUES (blah) WHERE SubmissionId =" + x;

              问题肯定是WHEREWHEREINSERT - See the MSDN documentation for the Insert command 无效。由于您按 SubmissionId 进行过滤,因此您可能希望改为使用 UPDATE

              至于找到问题的更好方法,学习使用 MSDN 文档是一个很好的步骤。快速谷歌搜索“msdn t-sql insert”将为您提供我在此答案前面链接到的页面。文档、经验、Google 和 Stack Overflow。这就是您找到解决方案的方式:)

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2020-05-22
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2015-02-23
                相关资源
                最近更新 更多