你只能先执行:
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分隔符。
祝你好运!!!
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. 数据库环境的更改只在 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') 不行
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
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')
declare @strDB varchar(200)
set @strDB='DBname'
exec ('use '+@strDB)不会出错,但是没有任何效果。
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')
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')
且go不是SQL也不能这样动态执行。
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')
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"'