sql中' 的有关问题
存储过程报错,找原因找了好久,以后是 ' 好的问题。结果发现是变量长度不够。不过对 ‘ 的应用有了新的理解。转发一篇关于 ' 应用的文章
1、 ' '是字符界定符,告诉SQL你输入的是字符,SQL已经知道@sitemtext是字符类型,所以不需要。
2、LIKE '%XXX% ' 可以拆分为 '% ' + 'XXX ' + '% ', 'XXX ' = @sitemtext。
3、EXEC执行字符串:@sitemtext对于EXEC来说变量,但对于EXEC内部的字串指令来说,它是常量,在运行EXEC之前,@sitemtext必然有个确定值(比如@sitemtext= 'TEST '),如果用1点代替3点,则变成“……NID = TEST……”,那字串指令将TEST解析为对象名。
4、道理同上。
比较笨的方法(也是避免错误的最佳方法):
A、全部先不加点:
exec (declare mycursor cursor for select top @maxitems SID,NID,NTime from (select top @mycount * from V_PC_DOWNUPDATE where BName like '%@sitemtext+% ') as MyTable order by NTime desc)
B、加首尾两点:
exec ( 'declare mycursor cursor for select top @maxitems SID,NID,NTime from (select top @mycount * from V_PC_DOWNUPDATE where BName like '%@sitemtext+% ') as MyTable order by NTime desc ')
C、给字串指令解析为数字的变量加1点:
exec ( 'declare mycursor cursor for select top ' + @maxitems + ' SID,NID,NTime from (select top ' + @mycount + ' * from V_PC_DOWNUPDATE where BName like '%@sitemtext+% ') as MyTable order by NTime desc ')
C、给字串指令解析为字符的变量加3点:
exec ( 'declare mycursor cursor for select top ' + @maxitems + ' SID,NID,NTime from (select top ' + @mycount + ' * from V_PC_DOWNUPDATE where BName like ' '% ' + @sitemtext + '% ' ') as MyTable order by NTime desc ')
D、检查在()里面,除了变量和“+”号,全部变成红色。