首页 > 解决方案 > 如何对 22 个相似的数据库运行相同的参数?

问题描述

我一直从一个数据库中提取数据,该数据库将 22 个设施的数据存储在一起。该数据库现已重新设计,我们拥有的每个设施都有 22 个独立的数据库(类似的)。如何使用相同的代码并同时针对所有这些数据库运行它?比如,我怎样才能传递相同的参数并从所有 22 个数据库中提取数据?

标签: sqlsql-server

解决方案


您可以使用 CURSOR 来满足您的要求。在这里,我放置了一个示例动态插入脚本,您可以根据需要进行调整。一项手动任务是您必须使用脚本在临时表中一一插入 22 个数据库名称。该工具是一次性工作,您可以在需要时重新使用该脚本。

--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_22')

--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 for your reference only

    -- You can see the Database Name inserted in the Script Dynamically from the Loop. 
    --The script could be INSERT/Update/DELETE As per requirement

    EXEC 
    (
        'INSERT INTO '+@DbName+'.dbo.<Your_table_Name_Here> 
        SELECT * FROM  master.dbo.<Your_table_Name_Here> '
    )

    --END OF Dynamic Part

    FETCH NEXT FROM db_cursor INTO @DbName 
END 

CLOSE db_cursor  
DEALLOCATE db_cursor  

推荐阅读