sql - 如何对 22 个相似的数据库运行相同的参数?
问题描述
我一直从一个数据库中提取数据,该数据库将 22 个设施的数据存储在一起。该数据库现已重新设计,我们拥有的每个设施都有 22 个独立的数据库(类似的)。如何使用相同的代码并同时针对所有这些数据库运行它?比如,我怎样才能传递相同的参数并从所有 22 个数据库中提取数据?
解决方案
您可以使用 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