declare @dbname varchar(50)
set @dbname='tjbus'
USE @dbname
select @dbname
go如上脚本中,select @dbname  可以被正确解释,但 USE @dbname ,却不能解释,如何解决在 USE XXX 中的变量使用问题?

解决方案 »

  1.   

    declare @dbname varchar(50)
    set @dbname='tjbus'
    EXEC('USE ' + @dbname)
      

  2.   

    注意:
    EXEC('USE ' + @dbname)这样打开的数据库只在EXEC期间有效,也就是说EXEC中打开的数据库在EXEC结束之后就被自动关闭了,丝毫不影响当前打开的数据库.例如:
    USE MASTER
    declare @dbname varchar(50)
    set @dbname='tjbus'
    EXEC('USE ' + @dbname)
    GO
    EXEC之后当前的数据库仍旧是MASTER而不是tjbus.所以,使用变量方式打开数据库时,必须把对该数据库的操作一起放到EXEC中执行,例如:
    declare @dbname varchar(50)
    set @dbname='tjbus'
    EXEC('USE ' + @dbname + ' select * from syscolumns')