补充一下,我要实现的目的就是首先根据一个参数,查出来一个表名,用这个表名在进行进一步的查询,但是由于我不知道如何把@linkname这个参数放到select语句里,所以使用一个变量,先形成一个完整的sql语句再用exec执行,当哪个字段是int类型的时候没有什么问题!在sql语句的变量里不会出现‘’嵌套的问题。可是当name的类型不是Int就需要‘’,加上了就出错!请高手帮帮忙!

解决方案 »

  1.   

    declare @linkname nvarchar(80),@str nvarchar(300) 
    select @linkname=Link_Name from Host_Info 
    set @str='select * from '+ @linkname +' where name=''222''' 
    exec (@str) 
      

  2.   

    在不确定 “exec (@str) ” 这里面的语句是否有问题时,可以用PRINT (@str) 打印出来,看看语法是否正确
      

  3.   

    declare @linkname nvarchar(80),@str nvarchar(300) 
    select @linkname=Link_Name from Host_Info   ---你这里也有错.
    set @str='select * from '+ @linkname +' where name=''222''' 
    exec (@str) 
      

  4.   

    nvarchar类型的变量是指变量是不定长的串,而用无where过滤条件的select语句可能返回的不只是一条记录,你应该提供表的一些其它信息进行过滤来查询表名,对每个表名进行一次查询