动态使用USE,只能在动态执行的时候起作用,执行完毕就恢复原来。
可以这样,将后面的工作一并执行:
set @sql = 'use ' + @databasename+ ' select * from yourtable'
exec (@sql)
可以这样,将后面的工作一并执行:
set @sql = 'use ' + @databasename+ ' select * from yourtable'
exec (@sql)
declare @databasename char(6)
set @databasename = 'mybase' set @sql = 'use ' + @databasename
exec (@sql)------ Transact-SQL 参考
USE
将数据库上下文更改为指定数据库。语法
USE { database }参数
数据库是用户上下文要切换到的数据库的名称。数据库名称必须符合标识符的规则。注释
USE 在编译和执行期间均可执行,并且立即生效。因此,出现在批处理中 USE 语句之后的语句将在指定数据库中执行。用户在登录到 Microsoft® SQL Server™ 时,通常被自动连接到 master 数据库。除非为每个用户的登录 ID 设置了各自的默认数据库,每个用户都必须执行 USE 语句从 master 切换到另一个数据库。若要将上下文更改为不同的数据库,用户必须有那个数据库的安全帐户。由数据库所有者提供此数据库的安全帐户。权限
USE 权限默认授予那些由执行 sp_adduser 的 dbo 和 sysadmin 固定服务器角色,或由执行 sp_grantdbaccess 的 sysadmin 固定服务器角色以及 db_accessadmin 和 db_owner 固定数据库角色指派了权限的用户。如果目的数据库中存在来宾用户,则在该数据库中没有安全帐户的用户依然可以访问。
请参见CREATE DATABASEDROP DATABASEEXECUTEsp_addaliassp_adduser sp_defaultdb使用标识符©1988-2000 Microsoft Corporation。保留所有权利。
set @sql = 'select * from '+@databasename+'.dbo.yourtable'
exec (@sql)
declare @sql char(13)
declare @databasename char(6)
set @databasename = 'mybase'
set @sql = 'use ' + @databasename
exec (@sql)
可以运行,但结果是没有任何效果,相当于没有执行。
所以我一般用下面这种:
set @sql = 'select * from '+@databasename+'.dbo.yourtable'
exec (@sql)