Могу ли я создать VIEW с динамическим именем в другой БД с MS SQL? - PullRequest
1 голос
/ 28 января 2010

Я нашел странные правила в синтаксисе MS SQL CREATE VIEW. Он должен находиться в первой строке пакетной обработки запроса и должен быть создан в текущей базе данных.

Я должен сделать VIEW, которые имеют динамическое имя, описываемое строковыми переменными (введите: VARCHAR или NVARCHAR). И эти виды должны быть созданы в других базах данных.

Из-за правила оператор CREATE VIEW должен находиться в первой строке пакетной обработки запроса, он не может быть после оператора USE. Итак, я попытался изменить базы данных с помощью оператора USE & GO. Но заявление GO, казалось, прояснило все переменные. Поэтому они недоступны для описания имени VIEW после оператора GO.

Есть ли у вас мнение для меня? И если вам известны причины синтаксических правил CREATE VIEW, сообщите мне.


Ой, прости. Я пропустил одну вещь. Имена баз данных также являются динамическими. И VIEWs, я хочу сделать, не только должен получить доступ к таблицам других баз данных но также должны быть созданы в других базах данных.

Хотя я не очень хорошо знаю OLAP, я думаю, что эта ситуация связана с OLAP.

Ответы [ 3 ]

1 голос
/ 29 января 2010
CREATE SYNONYM Resource1 FOR LinkedServer.Database.Schema.Table
GO
CREATE VIEW Resource1View
AS
SELECT *
FROM Resource1
GO

Теперь вы можете изменять синоним столько раз, сколько захотите, и все ваши взгляды, ссылающиеся на него, будут относиться к правильной вещи. Если это не решит проблему, то я бы предположил, что способ проектирования вашей системы не самый лучший. Пожалуйста, опишите подробнее, что вы делаете и почему, чтобы мы могли лучше вас проконсультировать.

Что касается "GO", то это на самом деле не оператор SQL. Он никогда не передается на сервер. клиент видит строку с GO на ней и разделяет отправленный запрос на отдельные пакеты. След докажет это, как и EXEC 'SELECT 1' + CHAR(13) + CHAR(10) + 'GO' + CHAR(13) + CHAR(10) + 'SELECT 2'.

Если вы используете OLAP, как в Analysis Services, то у меня недостаточно опыта, чтобы помочь вам, но я думаю, что есть способы выбрать базу данных для подключения, как в SSRS, запросы не должны жить в базе данных, но могут жить в приложении SSAS.

1 голос
/ 28 января 2010

Вы можете динамически создать строку sql и выполнить ее.

 DECLARE @ViewName VARCHAR(100)

 SET @ViewName = 'MyView'

 USE MyDB;

 EXEC ( 'CREATE VIEW dbo.' + @ViewName + ' '
      + 'AS SELECT * FROM dbo.MyTable')
0 голосов
/ 29 января 2010

Я нашел это. Это вложенный EXEC.

...