You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MSSQL中TSQL字符串等值匹配返回多余行原因问询

TSQL字符串等值匹配返回多余结果的原因

根本逻辑

这是ANSI SQL-92标准明确规定的字符串比较规则,SQL Server完全遵循该规则:

  • 使用=做等值比较时,会先将较短的字符串尾部补空格,直到两个字符串长度相同,再逐字符比对内容
  • 该填充仅发生在比较过程中,不会修改表中存储的原始数据

针对你的示例的具体说明

你的变量@C是VARCHAR(2)类型,值为'A '(A加1个空格,总长度2),表中id=1的记录存储的字符串为'A'(长度1):

  1. 执行string = @C判断时,SQL Server会自动把长度更短的'A'尾部补1个空格,填充为长度2的'A '
  2. 填充后的内容和@C完全一致,因此会被判定为匹配,最终返回了id=1和id=2两条记录

相关补充

你提到的LIKE语法不会触发该规则,因为LIKE属于模式匹配逻辑,不会自动填充尾部空格,会严格逐字符匹配内容,因此可以得到你预期的结果。
如果需要使用等值判断同时严格区分尾部空格,可以额外比对字符串的实际字节长度:

SELECT * FROM @T 
WHERE string = @C 
AND DATALENGTH(string) = DATALENGTH(@C)

DATALENGTH函数会返回字符串实际占用的字节数,尾部空格也会被正常计算,因此可以实现严格匹配的需求。


内容的提问来源于stack exchange,提问作者David Mrazek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 00:27:01