手机
当前位置:查字典教程网 >编程开发 >mssql数据库 >将mater库中的系统存储过程批量生成*.sql文件 通用且非常实用
将mater库中的系统存储过程批量生成*.sql文件 通用且非常实用
摘要:大家都知道系统存储过程是无法用工具导出的(大家可以试试>任务>生成SQL脚本)因为系统存储过程一般是不让开发人员修改的。需要知识:1、xp_...

大家都知道系统存储过程是无法用工具导出的(大家可以试试 >任务>生成SQL脚本)

因为系统存储过程一般是不让开发人员修改的。

需要知识:

1、xp_cmdshell命令的使用

2、sp_MS_marksystemobject 标记系统存储过程的方法

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' --是否标记为系统函数 1:是,0:否

,@proc_name varchar(100)='' --默认是所有,可以模糊搜索

,@savetype varchar(200)='.sql' --默认保存为sql脚本

)

as

/*

版本:v1

作者:达摩

日期:2012-04-13

功能:

1将master库的系统存储过程批量生成文件(系统存储过程无法自动导出)

2可以将所有类型的存储过程导出

3可以标记上系统存储过程

调用:

exec pr_procToSql '.','sa','H4ymH@$RTd','e:tommaster','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

--在最后面加上标记为系统存储过程

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)+']个为系统存储过程:'+@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、用于生成数据库中升级的脚本

欢迎大家帮我想想,还有别的办法吗?希望加QQ282329611交流。

生成结果如图:

将mater库中的系统存储过程批量生成*.sql文件 通用且非常实用1

【将mater库中的系统存储过程批量生成*.sql文件 通用且非常实用】相关文章:

AspNetPager分页控件 存储过程

MsSql 存储过程分页代码 [收集多篇]

sql server中千万数量级分页存储过程代码

HeadFirstSQL:学习笔记2/2

目前用到的两个分页存储过程代码

数据库存储过程分页显示

SQL Server 大量数据的分页存储过程代码

Sql语句与存储过程查询数据的性能测试实现代码

SQLServer2005及以上存储过程分页方法

sqlserver 常用存储过程集锦

精品推荐
分类导航