你只能先执行:
exec('use '+@strDB')
然后执行:
exec('CREATE VIEW dbo.viewDbsy2
AS
SELECT d.nodekey,t.mc 
FROM dbo.bDocFlow d INNER JOIN
      dbo.BTree t ON d.nodekey = t.nodeKey')CREATE VIEW 必须作为单独的语句执行或者前面有一个Go分隔符。
祝你好运!!!

解决方案 »

  1.   

    有两个问题
    1. 数据库环境的更改只在 EXECUTE 语句结束前有效。
    例如,在这个例子的 EXEC 后,数据库环境还是 master:
    USE master 
    EXEC ('USE pubs') 
    SELECT * FROM authors --出错2. Create View 必须是批处理中的第一条语句,也就是说
    EXEC ('Create view dbo.view1 as select * from authors') 可以但
    EXEC ('Use Pubs Create view dbo.view1 as select * from authors') 不行
      

  2.   

    我估计你的@strDB是输入参数,可以改成这样declare @strDB varchar(200)
    set @strDB='DBName'if @strDB = 'DBName'
    use DBName
    else if @strDB = 'DBName2'
    use DBName2
    else .../*  */ 
    CREATE VIEW dbo.viewDbsy2
    AS
    SELECT d.nodekey,t.mc 
    FROM dbo.bDocFlow d INNER JOIN
          dbo.BTree t ON d.nodekey = t.nodeKey
      

  3.   

    declare @strDB varchar(200)
    set @strDB='DBname'
    exec ('use '+@strDB)
    GO
    EXEC('CREATE VIEW dbo.viewDbsy2
           AS
           SELECT d.nodekey,t.mc 
           FROM dbo.bDocFlow d INNER JOIN
          dbo.BTree t ON d.nodekey = t.nodeKey')
      

  4.   

    我记得这些写是无效的:
    declare @strDB varchar(200)
    set @strDB='DBname'
    exec ('use '+@strDB)不会出错,但是没有任何效果。
      

  5.   

    将两句分开写不就行了吗?declare @strDB varchar(200)
    set @strDB='DBname'
    exec ('use '+@strDB)
    exec('  /*  */ CREATE VIEW dbo.viewDbsy2
    AS
    SELECT d.nodekey,t.mc 
    FROM dbo.bDocFlow d INNER JOIN
          dbo.BTree t ON d.nodekey = t.nodeKey')
      

  6.   

    declare @strDB varchar(200)
    set @strDB='DBname'
    exec ('use '+@strDB+' go CREATE VIEW dbo.viewDbsy2
    AS
    SELECT d.nodekey,t.mc 
    FROM dbo.bDocFlow d INNER JOIN
          dbo.BTree t ON d.nodekey = t.nodeKey')
      

  7.   

    这是限制,不行的。CREATE时要在本数据库。
    且go不是SQL也不能这样动态执行。
      

  8.   

    declare @strDB varchar(200)
    set @strDB='test'
    exec ('use '+@strDB)
    exec(' CREATE VIEW dbo.viewDbsy2
    AS
    SELECT d.nodekey,t.mc 
    FROM dbo.bDocFlow d INNER JOIN
          dbo.BTree t ON d.nodekey = t.nodeKey')
      

  9.   

    J9988,J老师的答案:declare @strDB varchar(200)
    set @strDB='test'
    declare @sql varchar(1000)
    set @sql=' osql -U sa -P ruirui  -d '+@strdb+' -q " CREATE VIEW dbo.viewDbsy2 
    AS
    SELECT d.nodekey,t.mc 
    FROM dbo.bDocFlow d INNER JOIN
          dbo.BTree t ON d.nodekey = t.nodeKey"'