none
为什么这种写法不会USE到指定的DB下面去呢? RRS feed

  • 问题

  • declare @db sysname,
    @sql nvarchar(max)
    select @db='wison'
    select @sql= ' use '+ @db+';select top 1 * from sys.tables'


    print @sql
    exec (@sql)

    虽然的确是查询的wison这个数据库下面的表,但是为什么执行之后 还是在之前的默认数据库下呢?

    假如需要执行一段动态SQL,使得之后当前数据库变化为use的那个数据库,请问要怎么改写呢?

     

    If you haven't all the things you want,be grateful for the things you don't have that you didn't want.

    2013年1月28日 5:17

全部回复

  • 作用域的问题

    exec 可以理解为单独的会话, 所以里面的操作受 use 的旷, 出来后, 这个会话结束了, 相关的东西自然消失

    你可以考虑把操作都放到动态语句里面, 或者是在程序的连接上去执行USE 语句, 这样该连接后续的操作都在这个 USE 的库里面

    2013年1月28日 8:01
  • 既然知道@DB的值,为什么不 @DB+'.sys.tables' 更简洁?? 

    Try SQL Server 2008 QQ:315054403 dgdba@hotmail.com

    2013年1月29日 0:36