T-SQL中WHERE子句变量拼接单引号查询无结果的求助
问题原因及解决方法
你的问题出在两个关键地方:
变量赋值丢失前导0
你给@Phone赋值时用了SET @Phone = 075000000,这里把数值075000000(实际等于75000000)赋值给字符串变量,SQL会自动把数值转成字符串'75000000',直接丢失了开头的0,自然和数据库里的'075000000'匹配不上。WHERE子句错误拼接单引号
你试图拼接单引号的写法完全没必要,而且会导致实际匹配的是带单引号的字符串(比如'\'075000000\''),但数据库里的phone字段值是不带外层单引号的,所以肯定查不到结果。
正确的SQL写法
-- 用NVARCHAR匹配字段类型,避免隐式转换 DECLARE @Phone NVARCHAR(50) SET @Phone = '075000000' -- 给字符串值加单引号,保留前导0 SELECT * FROM my_table WHERE phone = @Phone -- 直接用变量和字段比较,无需额外拼接
额外说明
如果坚持用VARCHAR变量,写法逻辑一致,只要保证赋值时加单引号保留前导0,WHERE子句直接用变量即可。另外,因为你的phone字段是NVARCHAR类型,用NVARCHAR变量能避免不必要的类型转换,性能和准确性更好。
内容的提问来源于stack exchange,提问作者Damian2310
相关产品推荐
相关产品推荐

