如果是我,用程序获取到所有的数据库名. USE master SELECT dbid, DB_NAME(dbid) AS DB_NAME FROM sysdatabases ORDER BY dbid GO 下面是结果集: dbid DB_NAME ------ ------------------------------ 1 master 2 tempdb 3 model 4 msdb 5 pubs (5 row(s) affected) 然后用程序循环去连接每个库,建立存储过程.当然,你也可以用油标来做.
提供一种方法給樓主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_Readcreate proc sp_Read asdeclare 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 roygoexec sp_msforeachdb 'exec ?.dbo.sp_Read'
USE master
SELECT dbid, DB_NAME(dbid) AS DB_NAME
FROM sysdatabases
ORDER BY dbid
GO 下面是结果集: dbid DB_NAME
------ ------------------------------
1 master
2 tempdb
3 model
4 msdb
5 pubs (5 row(s) affected) 然后用程序循环去连接每个库,建立存储过程.当然,你也可以用油标来做.
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>
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_Readcreate proc sp_Read
asdeclare 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 roygoexec sp_msforeachdb 'exec ?.dbo.sp_Read'
再Master建一個sp_開頭的存儲過程調用執行腳本
再用sp_msforeachdb 遍歷數據庫
樓上兄弟,你知道怎樣用不?Osql/sqlcmd/isql 需要有多少庫就生成多少個對應的腳本格式
我刚开始理解成200多台数据库服务器库名相同了.......orz