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条件的限制。

解决方案 »

  1.   

    处理动态生成的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)
      

  2.   

    @aa varchar(30),太短了.至少varchar(100)这样才行了.
      

  3.   

    DECLARE @gz char(8),@aa varchar(100),@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)
    谢谢,以上语句在查询分析器中通过,但是写入delphi 时,用adoquery.sql.add引用时,(其实也就是引号问题)
    set @aa='select '+@gz+' from  DJB  where cjmc='''+@cj+''' and  bh='''+@bh+''''老是有问题。
    请帮我写出delphi中正确的语句吧