我正在尝试在master数据库中创建一个存储过程,以便在此数据库下跨其他数据库创建视图。
我尝试在EXEC下使用“ USE dbname”,但是没有用。
这是我正在使用的代码,
CREATE PROCEDURE BuildMultipleViews
AS
EXEC ('USE database1
GO
CREATE VIEW ST
AS
SELECT DISTINCT t.col1, t.col2
FROM table1 t')
GO
答案 0 :(得分:1)
GO
不是T-SQL语句。 GO
是一个批处理分隔符,只有诸如SSMS和SQLCMD之类的T-SQL实用程序以及某些SMO API才能识别。 SQL Server无法理解问题中T-SQL脚本中GO
的含义。
要在除调用存储过程之一之外的数据库中创建视图,请使用符合目标数据库名称的sp_executesql
,并确保CREATE VIEW
是已执行批处理中的唯一语句:>
CREATE PROCEDURE dbo.BuildMultipleViews
AS
DECLARE @CreateViewStatement nvarchar(MAX) =
N'CREATE VIEW ST
AS
SELECT DISTINCT t.col1, t.col2
FROM table1 t;';
EXECUTE Database1..sp_executesql @CreateViewStatement;
EXECUTE Database2..sp_executesql @CreateViewStatement;
GO