日期:2014-05-19  浏览次数:20524 次

USE XXX 中的变量使用问题

declare   @dbname   varchar(50)
set   @dbname= 'tjbus '
USE   @dbname
select   @dbname
go

如上脚本中,select   @dbname     可以被正确解释,但   USE   @dbname   ,却不能解释,如何解决在   USE   XXX   中的变量使用问题?

------解决方案--------------------
注意:
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 ')


------解决方案--------------------
学习