动态SQL存储过程

时间:2018-07-19 07:34:35

标签: sql sql-server sql-server-2008 sql-server-2012

我需要一个建议。

我们有一个通用的存储过程,它将在该服务器上的所有数据库中运行。通常,我们只有一台生产服务器,并且是硬编码的参数[server_name]。

现在我们有多个生产服务器,我们需要在所有数据库上运行相同的存储过程,是否还有其他方法可以在SQL中不使用IF条件呢?

请帮助我做到这一点。谢谢

2 个答案:

答案 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);