读书人

sql中 的有关问题

发布时间: 2012-07-28 12:25:13 作者: rapoo

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、检查在()里面,除了变量和“+”号,全部变成红色。

读书人网 >SQL Server

热点推荐