数据类型 varchar 和 varchar 在 modulo 运算符中不兼容

declare @kh_fax varchar(50)
set @kh_fax='0371-'
select * from kh_tb where kh_fax like ''%'+@kh_fax+'%''

运行后出现错误提示:“数据类型 varchar 和 varchar 在 modulo 运算符中不兼容”

后改为

select * from kh_tb where kh_fax like '%'+@kh_fax+'%'

去掉一个单引号

替换变量后应该是这样:

select * from kh_tb where kh_fax like '%0371-%'

也就是说这里的 sql语句中的单引号 如 C#中的双引号一样,声明字符串

(在动态sql语句中是两个单引号代表一个 带单引号的字符串,最外面需要再由一堆单引号包括,如C#中一样字符串必须由双引号扩住,和C#中 “\”转定义一样,如:

declare @str nvarchar(2000)  
declare @time1 nvarchar(50)  
declare @time2 nvarchar(50)  
set @time1='2013-3-20'
set @time2='''2013-3-27'''
print @time1  
--结果是 2013-3-20  
print @time2  
--结果是 '2013-3-27'  
set @str='select * from KH_tb where add_time between '+char(39)+@time1+char(39)+' and '+@time2+''
exec(@str)  
    
print @str  
结果是 select * ...... between '2013-3-20' and '2013-3-27'
所以:动态语句的 单引号是用来包括字符串的,像@time1,就是原模原样的输出来了,而如果要输出@time2的带单引号的结构,那么它必须除了sql语句 特定包含字符串的两个单引号外(前后总共两个),字符串本身得含有单引号,而在单引号中包含单引号的话,就需要转定义,像C#一样"\",但SQL中用的是两个单引号代表1个单引号(仅限在动态sql中),当然也可以使用char(39)来代替单引号,这样可能更清楚明了
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值