如何创建存储过程以在同一SQL Server中跨数据库创建视图?

时间:2019-09-14 09:47:17

标签: sql sql-server tsql stored-procedures

我正在尝试在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

1 个答案:

答案 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
相关问题