SQL动态更改数据库并创建视图

时间:2019-06-10 14:04:05

标签: sql exec create-view

我需要在另一个数据库中创建一个视图。

我有一些这样的代码:

--sql start

USE MyDB1
GO

CREATE PROCEDURE [dbo].My_procedure
    DECLARE @prm_Name VARCHAR(60)
AS
BEGIN 
    DECLARE @sql = ''

    SET @sql = concat('USE MyDB2
    GO

    CREATE VIEW [dbo].[',@prm_Name,'_view]
    AS
        SELECT * 
        FROM [dbo].', @prm_Name)

    EXECUTE(@sql)
END
--sql end

但是调用此过程时,'GO'附近有语法错误。 我测试:

  set @sql = concat('
    CREATE VIEW [MyDB2].[dbo].[',@prm_Name,'_view]
    AS
    SELECT * FROM [dbo].',@prm_Name)
  execute(@sql

但是我遇到这个错误:“'CREATE / ALTER VIEW'不允许将数据库名称指定为对象名称的前缀。”

如何正确创建视图?

1 个答案:

答案 0 :(得分:0)

我使用了“ execute('execute ....”。并且它起作用了))

最终代码:

SET @sql = concat('
CREATE VIEW [dbo].[',@prm_Name,'_view]
AS
    SELECT * 
    FROM [dbo].', @prm_Name)
SET @sql = concat('
    USE MyDB2;
    execute(''',@sql,''')')

EXECUTE(@sql)