我需要一个建议。
我们有一个通用的存储过程,它将在该服务器上的所有数据库中运行。通常,我们只有一台生产服务器,并且是硬编码的参数[server_name]。
现在我们有多个生产服务器,我们需要在所有数据库上运行相同的存储过程,是否还有其他方法可以在SQL中不使用IF条件呢?
请帮助我做到这一点。谢谢
答案 0 :(得分:0)
最佳做法是将一台服务器链接到其他服务器。这样可以避免在不同的服务器上使用不同的存储过程。
具有链接服务器的单个服务器只需要:
每个特定服务器的存储过程都不同,表完全引用了SERVER.DATABASE.DBO.TABLE
然后,我将设置一个“主过程”,该过程简单地依次调用每个过程。
答案 1 :(得分:0)
您可以使用以下示例:
CREATE TABLE server_db_link(server_id INT, Server_name VARCHAR(100), db_name varchar(100));
INSERT INTO server_db_link(server_id, server_name, db_name)
VALUES(1, '[HOST1\INSTANCE1]', 'database1'),
(2, '[HOST1\INSTANCE2]', 'database2'),
(3, '[HOST2\INSTANCE3]', 'database3');
DECLARE @SQL_var NVARCHAR(MAX) = '';
SELECT @SQL_var = @SQL_var + 'EXEC '+server_name+'.'+db_name+'.dbo.procedure_name'
FROM server_db_link;
EXEC (@SQL_var);