SQL WHERE子句语法疑问:为何字符串条件被识别为列名?
SQL Server WHERE子句字符串匹配报错的原因及解决办法
问题核心出在字符串常量的引号使用规则上:
- SQL Server默认将双引号
"作为标识符(列名、表名这类数据库对象名称)的包裹符号,你写"Negative"时,数据库会误把它当成一个名为Negative的列来解析,因此抛出“Invalid column name 'Negative'”的错误。 - 你写
[SENTIMENT] = [SENTIMENT]能正常运行,是因为两边都是列名,数据库判断的是列值等于自身(除非列值为NULL,否则逻辑永远成立),但这显然不是你要的查询逻辑。
正确写法
将双引号替换为单引号'——SQL Server中字符串常量必须用单引号包裹:
SELECT TOP (1000) [VARNAME], [SENTIMENT], [VALUE] FROM my_table WHERE [SENTIMENT] = 'Negative';
补充说明(可选)
如果一定要用双引号表示字符串,可以先执行以下语句修改会话设置:
SET QUOTED_IDENTIFIER OFF;
但这种做法不推荐,会打破通用SQL的编码习惯,容易在其他场景引发混淆,建议始终用单引号处理字符串常量。
内容的提问来源于stack exchange,提问作者spareTimeCoder
相关产品推荐
相关产品推荐

