Как выполнить один SQL-запрос в нескольких базах данных - PullRequest
0 голосов
/ 29 мая 2019

У меня есть облачный сервер, на котором я разместил веб-приложение для своих клиентов. У каждого клиента есть своя база данных SQL и веб-сайт в IIS. Всякий раз, когда я хочу выполнить SQL-запрос для обновления чего-либо, я должен делать это вручную в каждой базе данных. Существует почти 50 баз данных, и каждый раз для выполнения одного запроса требуется около часа. Может ли кто-нибудь предоставить мне инструмент или способ, с помощью которого я просто выбираю всю базу данных одновременно и просто выполняю этот запрос?

1 Ответ

0 голосов
/ 29 мая 2019

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

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

Примечание: Это не решение, просто идея.

--The first step will be creating a Table variable 
--where you will INSERT all your database names 
--for a further loop as below- 

DECLARE @DbName VARCHAR(200)
DECLARE @DatabaseList TABLE (DbName VARCHAR(200))

INSERT INTO @DatabaseList (DbName) VALUES('db_name_1')
INSERT INTO @DatabaseList (DbName) VALUES('db_name_2')
--.......................
INSERT INTO @DatabaseList (DbName) VALUES('db_name_50')

--Now you can use CURSOR to generate the loop 
--and execute your required script as shown below

DECLARE db_cursor CURSOR FOR 
SELECT DbName FROM @DatabaseList

OPEN db_cursor  
FETCH NEXT FROM db_cursor INTO @DbName  

WHILE @@FETCH_STATUS = 0  
BEGIN  

    --HERE You need to write your script That you
    --Execute for all your database. I have added
    --a sample script where I guess you updating 
    --certain tables in your all database WHERE ID = 1

    -- You can see the Database Name inserted in the 
    -- Script Dynamically from the Loop

    EXEC ('UPDATE '+@DbName+'.dbo.<Your_table_Name_Here> 
           WHERE ID=1')

    --END OF Dynamic Part

    FETCH NEXT FROM db_cursor INTO @DbName 
END 

CLOSE db_cursor  
DEALLOCATE db_cursor 
...