【问题标题】:Sql Query Help, syntax error near =Sql 查询帮助,附近有语法错误=
【发布时间】:2011-07-11 10:16:21
【问题描述】:

为什么这不起作用?这与= 附近的命令字符串语法有关,但我似乎无法弄清楚,在线示例似乎完全相同。 编辑:Activated In 是一列。

来自How to select data from database with many filter options?的示例

private void btnDist_Click(object sender, EventArgs e)
{
    string cmdText = "SELECT * FROM Inventory WHERE Rep <> '#NA' AND Activated In = '#NA'";
    SqlDataAdapter adapter = new SqlDataAdapter(cmdText, GetConnection());
    DataSet distDS = new DataSet();
    adapter.Fill(distDS);

    dataGridView1.DataSource = distDS.Tables[0].DefaultView;
}

【问题讨论】:

    标签: c# sql sql-server tsql


    【解决方案1】:

    如果您数据库中的列名是Activated In(带空格),那么在查询中引用对象/列名时需要使用方括号,例如:

    SELECT * FROM Inventory WHERE Rep <> '#NA' AND [Activated In] = '#NA'
    

    这是因为 SQL 在查询语言中将空格视为分隔符 - 方括号用于在名称中“转义”此(和其他字符)。

    或者,如果该列仅被称为 Activated,那么您不需要 IN 位 - 要么测试相等,要么测试值是否在给定范围内,但不要同时做这两个。

    -- Use this
    SELECT * FROM Inventory WHERE Rep <> '#NA' AND Activated = '#NA'
    -- Or this
    SELECT * FROM Inventory WHERE Rep <> '#NA' AND Activated IN ('#NA', 'Some other value')
    

    【讨论】:

    • 这就是为什么您应该首先避免在表格设计中使用空格或关键字。如果这是一个尚未推送到 prod 的新表,我会立即修复字段名。
    • @Kragen,非常感谢您的回答,Activated In 是(曾经)列名,因此括号解决了问题。甚至不知道实际的 IN 关键字是什么
    【解决方案2】:

    把你的查询改成不需要IN关键字

    SELECT * FROM Inventory WHERE Rep <> '#NA' AND Activated = '#NA'"
    

    IN - 当你想从列表或子查询中过滤掉数据时使用。

    【讨论】:

      【解决方案3】:

      In 关键字使用如下:

      ...AND Activated IN ('#NA')
      ...AND Activated IN ('#NA', 'other filter value', 'more filter values')
      

      【讨论】:

        【解决方案4】:

        Activated In = '#NA'"

        这需要是Activated In ('#NA')"Activated = '#NA'"
        SQL 中的In 运算符是保留的。

        【讨论】:

          【解决方案5】:

          删除In之后的=

          string cmdText = "SELECT * FROM Inventory WHERE Rep <> '#NA' AND Activated In ('#NA')";
          

          您可能还想使用= 而不是In,因为您只指定了一项。

          string cmdText = "SELECT * FROM Inventory WHERE Rep <> '#NA' AND Activated = '#NA'";
          

          如果Activated In 是一列,则使用:

          string cmdText = "SELECT * FROM Inventory WHERE Rep <> '#NA' AND [Activated In] = '#NA'";
          

          【讨论】:

            【解决方案6】:

            Activated In 是一列?那么它应该是 ActivatedIn[Activated In]

            【讨论】:

              猜你喜欢
              • 2013-12-15
              • 2016-02-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-02-26
              • 1970-01-01
              • 2016-02-16
              • 1970-01-01
              相关资源
              最近更新 更多