將mater庫中的系統(tǒng)存儲過程批量生成*.sql文件 通用且非常實用
更新時間:2012年05月27日 22:15:22 作者:
最近因為系統(tǒng)需要,需要將master庫的所有和業(yè)務相關的存儲過程批量生成 存儲過程名.sql 文件,默認是不可以導出的
大家都知道系統(tǒng)存儲過程是無法用工具導出的(大家可以試試 >任務>生成SQL腳本)
因為系統(tǒng)存儲過程一般是不讓開發(fā)人員修改的。
需要知識:
1、xp_cmdshell命令的使用
2、sp_MS_marksystemobject 標記系統(tǒng)存儲過程的方法
3、dos 命令,如 type,>> 等
4、bcp 命令的使用
use master
go
if OBJECT_ID('pr_procToSql') is not null drop proc pr_procToSql
go
create proc pr_procToSql
(
@服務器名 varchar(100)
,@用戶名 varchar(100)
,@密碼 varchar(100)
,@path varchar(200)
,@database varchar(200)
,@sysproc int='0' --是否標記為系統(tǒng)函數 1:是,0:否
,@proc_name varchar(100)='' --默認是所有,可以模糊搜索
,@savetype varchar(200)='.sql' --默認保存為sql腳本
)
as
/*
版本:v1
作者:達摩
日期:2012-04-13
功能:
1\將master庫的系統(tǒng)存儲過程批量生成文件(系統(tǒng)存儲過程無法自動導出)
2\可以將所有類型的存儲過程導出
3\可以標記上系統(tǒng)存儲過程
調用:
exec pr_procToSql '.','sa','H4ymH@$RTd','e:\tom\master\','master','1',‘'
exec pr_procToSql '.','sa','a123456','e:\sql\','agt_trad','','pr_','.sql'
*/
set nocount on
declare @sp nvarchar(500),@s nvarchar(2000),@row int,@id int,@s_add varchar(2000)
set @s=' use '+@database
exec(@s)
if object_id('tempdb..#t') is not null drop table tempdb..#t
create table tempdb..#t(name varchar(2000)
, id int IDENTITY(1,1) not null
)
exec('
insert into tempdb..#t(name)
select name
--into TEMPDB..#T
from '+@database+'..sysobjects where xtype=''p'' and name like '''+@proc_name+'%''
')
select @row=COUNT(*) from tempdb..#t
print '共生成['+cast(@row as varchar)+']個存儲過程'
set @id=1
while @row>=@id
begin
select top 1 @sp=name from tempdb..#T where id=@id
if OBJECT_ID('tempdb..test') is not null drop table tempdb..test
--增加use master go
set @s_add='echo use ['+@database+']>>'+@path+@sp+@savetype
exec xp_cmdshell @s_add
set @s_add='echo GO>>'+@path+@sp+@savetype
exec xp_cmdshell @s_add
set @s_add='echo IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N''[dbo].['+@sp+']'') AND type in (N''P'', N''PC''))>>'+@path+@sp+@savetype
exec xp_cmdshell @s_add
set @s_add='echo DROP PROCEDURE [dbo].['+@sp+']>>'+@path+@sp+@savetype
exec xp_cmdshell @s_add
set @s_add='echo GO>>'+@path+@sp+@savetype
exec xp_cmdshell @s_add
set @s_add='echo SET ANSI_NULLS ON>>'+@path+@sp+@savetype
exec xp_cmdshell @s_add
set @s_add='echo GO>>'+@path+@sp+@savetype
exec xp_cmdshell @s_add
set @s_add='echo SET QUOTED_IDENTIFIER ON>>'+@path+@sp+@savetype
exec xp_cmdshell @s_add
set @s_add='echo GO>>'+@path+@sp+@savetype
exec xp_cmdshell @s_add
select @s='
select text into tempdb..test
from '+@database+'..syscomments
where id=OBJECT_ID('''+@database+'..'+@sp+''')
'
exec(@s)
--select * from tempdb..test
select @s='exec xp_cmdshell '+'''bcp tempdb..test out '+@path+@sp+cast(@id as varchar)+@savetype+' -c -S '+@服務器名+' -U '+@用戶名+' -P '+@密碼+''''
exec(@s)
--將前面加上use master 信息追加到 最前面
set @s_add='type '+@path+@sp+CAST(@id as varchar)+@savetype+'>>'+@path+@sp+@savetype
exec xp_cmdshell @s_add
set @s_add='echo GO>>'+@path+@sp+@savetype
exec xp_cmdshell @s_add
if @sysproc='1'
begin
--在最后面加上標記為系統(tǒng)存儲過程
set @s_add='echo exec sp_MS_marksystemobject ''['+@sp+']''>>'+@path+@sp+@savetype
exec xp_cmdshell @s_add
set @s_add='echo GO>>'+@path+@sp+@savetype
exec xp_cmdshell @s_add
print '標記第['+cast(@id as varchar)+']個為系統(tǒng)存儲過程:'+@sp
end
set @s_add='del '+@path+@sp+CAST(@id as varchar)+@savetype
exec xp_cmdshell @s_add
print '生成第['+cast(@id as varchar)+']個存儲過程:'+@sp
delete from tempdb..#T where id=@id
set @id=@id+1
end
此存儲過程可以完善的功能
1、生成視圖
2、生成函數
3、生成指定庫的表結構
4、生成指定庫的約束,用于批量生成升級腳本
5、用于生成數據庫中升級的腳本
歡迎大家?guī)臀蚁胂耄€有別的辦法嗎?希望加QQ282329611交流。
因為系統(tǒng)存儲過程一般是不讓開發(fā)人員修改的。
需要知識:
1、xp_cmdshell命令的使用
2、sp_MS_marksystemobject 標記系統(tǒng)存儲過程的方法
3、dos 命令,如 type,>> 等
4、bcp 命令的使用
復制代碼 代碼如下:
use master
go
if OBJECT_ID('pr_procToSql') is not null drop proc pr_procToSql
go
create proc pr_procToSql
(
@服務器名 varchar(100)
,@用戶名 varchar(100)
,@密碼 varchar(100)
,@path varchar(200)
,@database varchar(200)
,@sysproc int='0' --是否標記為系統(tǒng)函數 1:是,0:否
,@proc_name varchar(100)='' --默認是所有,可以模糊搜索
,@savetype varchar(200)='.sql' --默認保存為sql腳本
)
as
/*
版本:v1
作者:達摩
日期:2012-04-13
功能:
1\將master庫的系統(tǒng)存儲過程批量生成文件(系統(tǒng)存儲過程無法自動導出)
2\可以將所有類型的存儲過程導出
3\可以標記上系統(tǒng)存儲過程
調用:
exec pr_procToSql '.','sa','H4ymH@$RTd','e:\tom\master\','master','1',‘'
exec pr_procToSql '.','sa','a123456','e:\sql\','agt_trad','','pr_','.sql'
*/
set nocount on
declare @sp nvarchar(500),@s nvarchar(2000),@row int,@id int,@s_add varchar(2000)
set @s=' use '+@database
exec(@s)
if object_id('tempdb..#t') is not null drop table tempdb..#t
create table tempdb..#t(name varchar(2000)
, id int IDENTITY(1,1) not null
)
exec('
insert into tempdb..#t(name)
select name
--into TEMPDB..#T
from '+@database+'..sysobjects where xtype=''p'' and name like '''+@proc_name+'%''
')
select @row=COUNT(*) from tempdb..#t
print '共生成['+cast(@row as varchar)+']個存儲過程'
set @id=1
while @row>=@id
begin
select top 1 @sp=name from tempdb..#T where id=@id
if OBJECT_ID('tempdb..test') is not null drop table tempdb..test
--增加use master go
set @s_add='echo use ['+@database+']>>'+@path+@sp+@savetype
exec xp_cmdshell @s_add
set @s_add='echo GO>>'+@path+@sp+@savetype
exec xp_cmdshell @s_add
set @s_add='echo IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N''[dbo].['+@sp+']'') AND type in (N''P'', N''PC''))>>'+@path+@sp+@savetype
exec xp_cmdshell @s_add
set @s_add='echo DROP PROCEDURE [dbo].['+@sp+']>>'+@path+@sp+@savetype
exec xp_cmdshell @s_add
set @s_add='echo GO>>'+@path+@sp+@savetype
exec xp_cmdshell @s_add
set @s_add='echo SET ANSI_NULLS ON>>'+@path+@sp+@savetype
exec xp_cmdshell @s_add
set @s_add='echo GO>>'+@path+@sp+@savetype
exec xp_cmdshell @s_add
set @s_add='echo SET QUOTED_IDENTIFIER ON>>'+@path+@sp+@savetype
exec xp_cmdshell @s_add
set @s_add='echo GO>>'+@path+@sp+@savetype
exec xp_cmdshell @s_add
select @s='
select text into tempdb..test
from '+@database+'..syscomments
where id=OBJECT_ID('''+@database+'..'+@sp+''')
'
exec(@s)
--select * from tempdb..test
select @s='exec xp_cmdshell '+'''bcp tempdb..test out '+@path+@sp+cast(@id as varchar)+@savetype+' -c -S '+@服務器名+' -U '+@用戶名+' -P '+@密碼+''''
exec(@s)
--將前面加上use master 信息追加到 最前面
set @s_add='type '+@path+@sp+CAST(@id as varchar)+@savetype+'>>'+@path+@sp+@savetype
exec xp_cmdshell @s_add
set @s_add='echo GO>>'+@path+@sp+@savetype
exec xp_cmdshell @s_add
if @sysproc='1'
begin
--在最后面加上標記為系統(tǒng)存儲過程
set @s_add='echo exec sp_MS_marksystemobject ''['+@sp+']''>>'+@path+@sp+@savetype
exec xp_cmdshell @s_add
set @s_add='echo GO>>'+@path+@sp+@savetype
exec xp_cmdshell @s_add
print '標記第['+cast(@id as varchar)+']個為系統(tǒng)存儲過程:'+@sp
end
set @s_add='del '+@path+@sp+CAST(@id as varchar)+@savetype
exec xp_cmdshell @s_add
print '生成第['+cast(@id as varchar)+']個存儲過程:'+@sp
delete from tempdb..#T where id=@id
set @id=@id+1
end
此存儲過程可以完善的功能
1、生成視圖
2、生成函數
3、生成指定庫的表結構
4、生成指定庫的約束,用于批量生成升級腳本
5、用于生成數據庫中升級的腳本
歡迎大家?guī)臀蚁胂耄€有別的辦法嗎?希望加QQ282329611交流。
生成結果如圖:
相關文章
在Windows XP系統(tǒng)安裝SQL server 2000 企業(yè)版(圖解版)
今天在網上下載一個軟件,需要使用MS SQL,海波用的是 Windows XP Professional(專業(yè)) 版系統(tǒng),而SQL卻是企業(yè)版。安裝的時候提示我只能安裝客戶端,服務程序卻不能安裝。海波在網上搜索到了一些方法,設置成功了2014-07-07
SQL Server 日期函數CAST 和 CONVERT 以及在業(yè)務中的使用介紹
。最近時間剛從客戶端轉入后臺寫服務,對于后臺數據庫以及服務的書寫完全是個小白,所以最近寫的肯定沒有太多技術含量2013-01-01
SQLServer 使用ADSI執(zhí)行分布式查詢ActiveDorectory對象
SQLServer 通過使用 ADSI 執(zhí)行分布式查詢ActiveDorectory對象的實現(xiàn)方法。2010-05-05
SQL Server實現(xiàn)將特定字符串拆分并進行插入操作的方法
這篇文章主要介紹了SQL Server實現(xiàn)將特定字符串拆分并進行插入操作的方法,涉及SQL Server的循環(huán)、遍歷、判定及插入等相關操作技巧,需要的朋友可以參考下2016-08-08

