declare @strDB varchar(200)
set @strDB='DBname'
exec ('use '+@strDB+' /* */ 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' 必须是批查询中的第一条语句。
---------------------------------------------------------------
你只能先执行:
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') 不行
---------------------------------------------------------------
我估计你的@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
---------------------------------------------------------------
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')
---------------------------------------------------------------
我记得这些写是无效的:
declare @strDB varchar(200)
set @strDB='DBname'
exec ('use '+@strDB)
不会出错,但是没有任何效果。
---------------------------------------------------------------
将两句分开写不就行了吗?
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')
---------------------------------------------------------------
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')
---------------------------------------------------------------
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"'