--当前数据库是MASTER,执行以下语句,当前数据库依然是MASTER,declare @dbzt sysname
set @dbzt='db2008' --设置数据库名
exec ('use '+@dbzt) --设置当前数据库,但没有成功,也没有报错,只提示"命令已成功完成"。当前数据库仍为MASTER,是什么原因?是不是EXEC不支持USE语句?
请教?谢谢!

解决方案 »

  1.   

    数据库环境的更改只在 EXECUTE 语句结束前有效。例如,在这个例子的 EXEC 后,数据库环境是 master:USE master EXEC ("USE pubs") SELECT * FROM authors
      

  2.   

    即写在Exec中是改变不了数据库环境的:),要想改变必须在Exec之前写
      

  3.   

    别让楼上太寂寞了,凑凑热闹.
    把要执行的操作都写到动态SQL中,然后再EXEC这个动态SQL.例如这样:
    EXEC ('USE pubs  SELECT * FROM authors')
      

  4.   

    动态sql,
    或者你不改变当前数据库,用dbo.数据库名.table来操作也行。
      

  5.   

    To:hellowork
       我每执行一条语句都要写上USE PUBS???
      

  6.   

    exec ('use '+ @dbzt + ' select * from tablename')
    这是比较好的办法了.要不然就在是在数据库对象前加上数据库名前缀,例如:
    use master
    declare @dbzt sysname
    set @dbzt='db2008' --设置数据库名
    exec('select * from ' + @dbzt + '.. tablename')   /*为表加上数据库名称*/
    如果要执行多个db2008中的表,每个表都加前缀的话,这样不是更麻烦?