为什么动态sql中where条件无效?
DECLARE @gz char(8),@aa varchar(30),@cj char(20),@bh char(4)
set @gz = 'Jb '
set @cj= '一厂e区 '
set @bh= '1 '
set @aa= 'select '+@gz+ ' from DJB where cjmc= '+@cj+ ' and bh= '+@bh+ ' '
exec(@aa)
语句如上,但是查询出来的结果没有受到where条件的限制。
[解决办法]
@aa的长度有可能不够长
当查询的值为字符串时,引号的问题得注意
[解决办法]
注意 ' ' ' ' '
[解决办法]
打断点,如果是存储过程,那么就跟踪,看看语句是怎么回事就对了,程序一定没有问题,应该是自己问题,细心和耐心应该会解决的
[解决办法]
处理动态生成的SQL用Print来调试
DECLARE @gz char(8),@aa varchar(30),@cj char(20),@bh char(4)
set @gz = 'Jb '
set @cj= '一厂e区 '
set @bh= '1 '
set @aa= 'select '+@gz+ ' from DJB where cjmc= '+@cj+ ' and bh= '+@bh+ ' '
print @aa
从输出结果看@aa的长度不够,被自动截取!
一般来说,做为SQL的结果变量,应设为Varchar(8000)
在SQL 2005中,最好使用Varchar(Max)
[解决办法]
@aa varchar(30),太短了.至少varchar(100)这样才行了.