有多个相同的数据库,如何批量创建相同的存储过程?

Jelon 2009-12-24 10:07:42
我现在有多个相同的数据库(200个以上),如果手工在每个数据库维护存储过程,工作量很大。
请问创建存储过程后,有什么办法将存储过程更新到其他所有数据库中去呢?
还请大家提供解决办法,谢谢!
...全文
196 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
忆轩辕 2009-12-24
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 roy_88 的回复:]
引用 23 楼 colacat911 的回复:
用osql写成bat执行就可以了,200个一个一个来不累死=.=


樓上兄弟,你知道怎樣用不?

Osql/sqlcmd/isql 需要有多少庫就生成多少個對應的腳本格式
[/Quote]

我刚开始理解成200多台数据库服务器库名相同了.......orz
中国风 2009-12-24
  • 打赏
  • 举报
回复
如果是多個實例時,數據庫名相同時可以這用Osql/sqlcmd/isql,讀固定格式腳本

在SQL08可以直接
中国风 2009-12-24
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 colacat911 的回复:]
用osql写成bat执行就可以了,200个一个一个来不累死=.=
[/Quote]

樓上兄弟,你知道怎樣用不?

Osql/sqlcmd/isql 需要有多少庫就生成多少個對應的腳本格式
忆轩辕 2009-12-24
  • 打赏
  • 举报
回复
呃,你的200多个数据库在一个服务器上?那只要读出库名,然后跑循环执行语句就可以了
忆轩辕 2009-12-24
  • 打赏
  • 举报
回复
用osql写成bat执行就可以了,200个一个一个来不累死=.=
辛鹤 2009-12-24
  • 打赏
  • 举报
回复
用程序循环去连接每个库,建立存储过程
  • 打赏
  • 举报
回复
向梁哥学习
ggsysy 2009-12-24
  • 打赏
  • 举报
回复
学习
chuifengde 2009-12-24
  • 打赏
  • 举报
回复
将存储过程以sp_开头作到master中,所有的库都可以调用它了
中国风 2009-12-24
  • 打赏
  • 举报
回复
做為變量時,要注意字符的引號的轉換

如:

use Master
go
if not object_id('sp_Read') is null
drop proc sp_Read
go
create proc sp_Read
(
@SQL nvarchar(max)
)
as
exec(@SQL)
go

declare @s nvarchar(max)
set @s='create proc P1 AS select 1 as COl,''''Exec'''' as SQL'
--'drop proc P1'--執行腳本
set @s ='exec ?.dbo.sp_Read '''+@s+''''
exec sp_msforeachdb @S
中国风 2009-12-24
  • 打赏
  • 举报
回复
把執行的腳本存放在一個表中,
再Master建一個sp_開頭的存儲過程調用執行腳本
再用sp_msforeachdb 遍歷數據庫
中国风 2009-12-24
  • 打赏
  • 举报
回复
提供一种方法給樓主

use Tempdb
go
--drop table Tmp
create table Tmp(SQL nvarchar(max))
insert Tmp select 'create proc dbo.p1
as
select 1 as Roy'
go
use Master
go
--drop proc sp_Read

create proc sp_Read
as

declare Roy cursor local for
select SQL from Tempdb.dbo.Tmp
declare @SQL nvarchar(max)
open roy
fetch next from Roy into @SQL
while @@Fetch_status=0
begin
exec(@SQL)
fetch next from Roy into @SQL
end
close Roy
deallocate roy

go

exec sp_msforeachdb 'exec ?.dbo.sp_Read'
Jelon 2009-12-24
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 roy_88 的回复:]
把存儲過程改為變量,再處理
[/Quote]
你是说将创建存储过程的内容全部放到一个字符串中,然后执行动态语句吗?
当存储过程中的代码比较多时,这种方式是否比较复杂,能否详细说说?
Jelon 2009-12-24
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 chuifengde 的回复:]
200个库是分散在同一服务器的同一实例中?同一服务器的不同实例中?不同服务器的不同实例中?
[/Quote]

可以只考虑同一服务器的同一实例的情况。
chuifengde 2009-12-24
  • 打赏
  • 举报
回复
200个库是分散在同一服务器的同一实例中?同一服务器的不同实例中?不同服务器的不同实例中?
中国风 2009-12-24
  • 打赏
  • 举报
回复
把存儲過程改為變量,再處理
jinsenhome 2009-12-24
  • 打赏
  • 举报
回复
学习中
qiqi860819 2009-12-24
  • 打赏
  • 举报
回复
好难,好麻烦
dawugui 2009-12-24
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 jelon 的回复:]
引用 7 楼 dawugui 的回复:
引用 4 楼 jelon 的回复:
可能关键在动态创建存储过程这部分,之前看网上有人说用以下语句创建SP,但我执行不成功。
exec master.dbo.xp_cmdshell 'osql -U 用户名 -P 密码 -i c:\**1.sql'


你在运行这句之前,先要连接上这个库.
use dbname
go


我执行xp_cmdshell后,返回结果如下所示,存储过程也没创建成功。
1> 2> 3> 4> 5> 6> 7> 8> 1> 2> 1> 2> 3> 4> 5> 6> 7> 8> 9> 10> 11> 12> 13> 14> 15> 16>
[/Quote]
那就不知道了.
建议你还是按照2,3楼的方法来做.
Jelon 2009-12-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 dawugui 的回复:]
引用 4 楼 jelon 的回复:
可能关键在动态创建存储过程这部分,之前看网上有人说用以下语句创建SP,但我执行不成功。
exec master.dbo.xp_cmdshell 'osql -U 用户名 -P 密码 -i c:\**1.sql'


你在运行这句之前,先要连接上这个库.
use dbname
go
[/Quote]

我执行xp_cmdshell后,返回结果如下所示,存储过程也没创建成功。
1> 2> 3> 4> 5> 6> 7> 8> 1> 2> 1> 2> 3> 4> 5> 6> 7> 8> 9> 10> 11> 12> 13> 14> 15> 16>
加载更多回复(7)

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧