/******************************************************************
修改远程服务器的存储过程 DoAlterProc
**********************************
Version: Sql 2005
Author : js_szy
Date : 2011.1.7
优点:可同时创建、修改多台服务器的存储过程(不用手动连接服务器)
或其他对象,本例以proc 为例,其他各位自己发挥。比如,表,或者搜集多台服务器的数据信息
缺点:所有的要修改的服务器的对象名必须一致,且内容必须一致
*******************************************************************
本地对象:dBase 服务器列表表
aa.txt 文本文档
DoAlterProc 存储过程
使用方法:
1、本地有表dBase 存放远程服务器的信息
2、aa.txt 存放服务器要修改的proc 的所有内容
3、执行本地DoAlterProc 存储过程
-- 查看记录
select * from szy.dbo.dBase
dbip dbname dbuser dbpwd lx bz
---------------------------- -------- ------ --------- ----------- --------------------
199.99.1.101 SER sa sa009 1 A组服务器SQL2000
199.99.1.101/server2005 SER2005 sa sa 1 A组服务器SQL2005
199.99.1.17 zh sa 1 A组服务器
199.99.2.101/server2005 SER2005 sa sa 2 B组服务器SQL2005
199.99.2.17 zh sa 2 B组服务器
-- 插入记录
use szy
insert dBase
select '199.99.1.27', -- 服务器+实例名
'zh', -- 数据库名
'sa', -- 用户名
'', -- 用户密码
2, -- 类型(:服务器,:同事,可以进一步具体化)
'' -- 备注
测试用例:
EXEC DoAlterProc 1
*******************************************************************/
CREATE PROC [dbo].[DoAlterProc]
@lx int -- 服务器类型 1 是A组服务器
---@ProcName varchar(30) -- 存储过程名(备份时使用)
AS
-- 修改
DECLARE @cmd nvarchar(MAX);DECLARE @TEXT NVARCHAR;
SET @cmd = '';
SELECT
@cmd = @cmd + 'EXEC xp_cmdshell N''sqlcmd -S '+dbip+' -i"D:/aa.txt" -d '+dbname+' -U '+dbuser+
case when isnull(dbpwd,'')='' then '' else ' -P ' end +dbpwd+''';'+CHAR(13)+CHAR(10)
FROM dbase
where lx=@lx;
print @cmd
EXEC(@cmd)
GO
-- EXEC xp_cmdshell N'sqlcmd -S 99.99.1.27 -i"D:/aa.txt" -d zh -U sa';