我正在使用SQL Server 2008 R2
。我有不同five databases on the same server.
tables and stored procedure schema of all of them are the same
但data are different
,因为我已将它们指向不同的网站。现在,我想创建一个sql job
,每天晚上9:30运行。从数据库表中获取数据并将其存储到临时表中。还有一个sql作业将临时表的数据写入LOG文件。
我为此创建了two different stored procedures
-One获取数据和其他写入数据,并且两个数据库都正常工作。
但问题是,在sql server代理中,我不想为获取存储过程名称并执行它的每个数据库创建2个SQL作业(Total 10 sql jobs)。而不是那样,我想创建ONLY TWO SQL JOBS
。一个将执行存储过程以将数据提取到临时表中,另一个将在第一个完成后执行,并将数据写入服务器中每个数据库的saperate目录的日志文件中。
因为,我在所有五个数据库中都有相同的存储过程名称和表名,是否可能?
答案 0 :(得分:1)
我的建议是创建一个或两个作业并使用动态sql来循环运行sp。您可以通过exec [Database1]在另一个数据库中运行sp。[dbo] .usp_procedurename @ parametr1。
答案 1 :(得分:0)
我相信sp_MSforeachdb
会解决你的目的。将它与If子句配对以选择/忽略某些数据库。
DECLARE @command varchar(1000)
SELECT @command = 'IF ''?'' IN(''myDB1'', ''myDB2'', ''myDB3'') BEGIN USE ? Select db_Name() END'
--Print @command
EXEC sp_MSforeachdb @command