≡
  • 网络编程
  • 数据库
  • CMS技巧
  • 软件编程
  • PHP笔记
  • JavaScript
  • MySQL
位置:首页 > 数据库 > SQL Server

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

人气:479 时间:2019-09-28

这篇文章主要为大家详细介绍了SQL Server 将mater库中的系统存储过程批量生成*.sql文件 通用且非常实用,具有一定的参考价值,可以用来参考一下。

感兴趣的小伙伴,下面一起跟随四海网的小编两巴掌来看看吧!

大家都知道系统存储过程是无法用工具导出的(大家可以试试 >任务>生成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:\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 
--在最后面加上标记为系统存储过程 
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交流。

生成结果如图:
【图片暂缺】

本文来自:http://www.q1010.com/179/7891-0.html

注:关于SQL Server 将mater库中的系统存储过程批量生成*.sql文件 通用且非常实用的内容就先介绍到这里,更多相关文章的可以留意四海网的其他信息。

关键词:SQL SERVER

您可能感兴趣的文章

  • SQLServer 跨库查询实现方法
  • SQL Server 数据库主键的生成方式小结(sqlserver,mysql)
  • SQL Server使用cmd命令行窗口操作SqlServer的方法
  • SQLServer 2005 实现数据库同步备份 过程-结果-分析
  • SQL Server CREATE FUNCTION sqlserver用户定义函数
  • sqlserver 查询数据库大小的方法
  • SQL Server 存储过程解密(破解函数,过程,触发器,视图.仅限于SQLSERVER2000)
  • SQLServer 触发器 数据库进行数据备份
  • 用户"sa"登陆失败 SQLServer 错误18456的解决方法
  • SQL Server做购物车系统时利用到得几个sqlserver 存储过程
上一篇:SQL Server 用SQL统计SQLServe表存储空间大小的代码
下一篇:SQL Server 查询性能优化之走出索引的误区示例
热门文章
  • SQL Server SQL获取第一条记录的方法
  • SQL Server出现System.OutOfMemoryException异常的解决方法
  • SQL Server的 update from 语句的简单示例
  • SQL Server 数据库备份方法菜鸟教程
  • SQL Server 多表关联时在where语句中慎用trim()方法
  • SQL Server数据类型及长度限制详细说明
  • mybaits非配置原因,导致SqlSession was not registered for synchronization异常解析
  • SQL Server 收缩后对数据库的使用有影响吗?
  • SQL Server 格式导致的Excel导入sql出现异常的解决方法
  • SQL Server 连接服务器出现错误 7391的解决方法
  • 最新文章
    • SQL Server存储过程基本语法的简单示例
    • sql查询时增加自动编号和分页的简单示例
    • sql轻松应付百万数据的高效数据分页存储过程的简单示例
    • sql获取一条数据中所有字段的名称和值的实现方法
    • sql分割函数的简单示例
    • SQL Server异常捕获的简单示例
    • SQL SERVER回滚恢复误操作数据的实现方法
    • SQL Server函数或存储过程中抛出异常的实现方法
    • SQL Server创建数据库的完整代码
    • SQL Server创建数据库的命令用法示例

四海网收集整理一些常用的php代码,JS代码,数据库mysql等技术文章。