Цикл по списку базы данных, чтобы удалить и воссоздать представление - PullRequest
0 голосов
/ 06 января 2012

Я не уверен, возможно ли это сделать с помощью цикла в TSQL.

У меня есть список баз данных, которые я хотел бы просмотреть и для каждого удаления базы данных и при необходимости воссоздать представление.

У меня уже есть скрипт для удаления и воссоздания вида. Тем не менее, в настоящее время в верхней части моего скрипта у меня есть куча операторов использования, и я просто иду вниз по списку, раскомментируя и перезапуская скрипт. Однако я хотел бы автоматизировать это так, чтобы это было намного быстрее. В прошлом я делал похожую вещь, зацикливая строку с именами баз данных и используя ее для выполнения оператора использования. Что работает, кроме случаев создания представлений, потому что представление должно быть отделено операторами go. Вот фрагмент кода моего кода для разбора баз данных, любая помощь в работе с представлениями была бы великолепна.

DECLARE @DBs AS VARCHAR(MAX);
DECLARE @OneDB AS VARCHAR(255);
DECLARE @CmdToExec AS VARCHAR(MAX);

SET @DBs = 'db1,db2,db3,db4,db5,db6,db7,db8,db9,db10,db11,db12,db13,db14,db15,db16'

DECLARE DB_Cursor CURSOR FOR
    SELECT SUBSTRING( ',' + @DBs + ',', n + 1,
        CHARINDEX( ',', ',' + @DBs + ',', n + 1 ) - n - 1 ) AS "dbInfo"
    FROM CommunityPAL.dbo.Numbers
    WHERE SUBSTRING( ',' + @DBs + ',', n, 1 ) = ','
        AND n < LEN( ',' + @DBs + ',' );
OPEN DB_Cursor;
FETCH NEXT FROM DB_Cursor INTO @OneDB;
WHILE @@FETCH_STATUS = 0
BEGIN
    SET @CmdToExec = 'USE ' + @OneDB;
    EXEC @CmdToExec;

    --statements to execute

    FETCH NEXT FROM DB_Cursor INTO @OneDB;
END
CLOSE DB_Cursor
DEALLOCATE DB_Cursor

Ответы [ 2 ]

0 голосов
/ 07 января 2012

Пожалуйста, проверьте процедуру sp_msforeachdb для цикла для всех баз данных:

Воспользуйтесь недокументированными итерационными процедурами SQL Server

0 голосов
/ 06 января 2012

Я почти уверен, что вы не можете делать то, что хотите, исключительно в T-SQL.CREATE VIEWALTER VIEW) не используют соглашение об именовании из трех частей (database.schema.object).Это должен быть единственный оператор в пакете, поэтому его нельзя объединить с командой USE в динамическом вызове SQL (EXEC или sp_executeSQL), а действие этого USE будет длиться только додлительность этого пакета (то есть до тех пор, пока не будет внедрен GO).

Однако я проделал аналогичную работу с «внешнего» SQL-сервера, обновляя конкретные объекты во всех базах данных определенного «типа» (где мы имеемодин на клиента / клиента).Это становится сложным.Краткое описание:

  • Используйте язык сценариев (или программирования) по вашему выбору
  • Цикл по списку баз данных
  • Выполните SQLCMD один раз для каждой базы данных, ивыполнить ваш [RE]CREATE VIEW скрипт
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...