SQL динамически изменяет базу данных и создает представление - PullRequest
1 голос
/ 10 июня 2019

Мне нужно создать представление в другой базе данных.

У меня есть такой код:

--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 голосов
/ 11 июня 2019

Я использовал "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)
...