Sql Query Help,语法错误接近=

时间:2011-07-11 10:16:21

标签: c# sql sql-server tsql

为什么这不起作用?这是=附近的命令串语法,但我似乎无法弄明白,在线示例似乎完全相同。 修改:已激活为列。

来自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;
}

6 个答案:

答案 0 :(得分:6)

如果数据库中列的名称为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')

答案 1 :(得分:4)

将您的查询更改为不需要IN关键字

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

IN - 用于过滤掉列表或子查询中的数据时使用。

答案 2 :(得分:2)

In关键字的用法如下:

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

答案 3 :(得分:1)

Activated In = '#NA'"

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

答案 4 :(得分:1)

=

之后删除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'";

答案 5 :(得分:1)

已激活是一列?那应该是 ActivatedIn [Activated In]