2010-07-22 3 views
1

Скажем, у меня есть скрипт обновления:Запустить сценарий на нескольких БД (SQL Server)?

update sometable set somecolumn = 'somevalue' where xyz = 0 

Теперь, скажем, у меня есть несколько баз данных, как DB1, DB2, DB3 и так далее. Как я могу запустить этот скрипт на всех из них, не выполняя его вручную?

Спасибо :)

+0

проверить обновленный ответ –

ответ

1

Если вы хотите, чтобы все базы данных, вы можете использовать sp_MSforeachdb:

http://www.databasejournal.com/features/mssql/article.php/3441031/SQL-Server-Undocumented-Stored-Procedures-spMSforeachtable-and-spMSforeachdb.htm

EXEC sp_MSforeachdb @command1="UPDATE ?..sometable SET somecolumn='somevalue' WHERE xyz=0" 

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

http://www.sqlservercurry.com/2009/04/6-common-uses-of-undocumented-stored.html

Надежда, что помогает.

+0

Это прекрасная особенность! – grady

+0

Недокументированные хранимые процедуры не рекомендуется использовать ни во что, кроме специальных сценариев, поскольку они могут быть изменены или даже удалены в любое время. Вы всегда можете свернуть свой собственный довольно легко. –

2

Вы можете сделать это с помощью курсора

  • получить список всех сервера в локальной сети или в сети

  • создать курсор для этого

  • Than используйте sp_executesql для запуска сценария обновления с помощью исходного запроса

    set ANSI_NULLS ON 
    set QUOTED_IDENTIFIER ON 
    GO 
    
    CREATE PROCEDURE [sp_cross_db_query] 
    @SQLQuery varchar(400) 
    AS 
    
    DECLARE @DB_Name varchar(100) 
    DECLARE database_cursor CURSOR FOR 
    
    SELECT DatabaseName 
    FROM Management.dbo.Customers 
    
    OPEN database_cursor 
    
    FETCH NEXT FROM database_cursor INTO @DB_Name 
    
    WHILE @@FETCH_STATUS = 0 
    BEGIN 
        exec(
         'USE [' + @DB_Name + '];' + 
         @SQLQuery 
         ) 
         FETCH NEXT FROM database_cursor INTO @DB_Name 
    END 
    CLOSE database_cursor 
    DEALLOCATE database_cursor 
    

    для выполнения запроса

    exec sp_cross_db_query 'SELECT count(*) FROM Products' 
    
+0

Спасибо, может у вас какой-нибудь SQL, пожалуйста? – grady

+0

проверить обновленный ответ –

+0

Спасибо, FROM Management.dbo.Customers вызывает некоторые проблемы ... что не так? – grady

Смежные вопросы