SQLSERVER编写存储过程小工具

首页 > 网络编程 > ASP编程 > 存储过程 更新日期: 2015-06-01

在开发数据库系统的过程中,经常要写很多的存储过程。为了统一格式和简化开发过程,我编写一些存储过程,用来自动生成存储过程。下面就为您简单介绍一下它们。其中一个用于生成Insert过程,另一个用于生成Update过程。 
Sp_GenInsert 
该过程运行后,它为给定的表生成一个完整的Insert过程。如果原来的表有标识列,您得将生成的过程中的SET IDNTITY_INSERT ON 语句手工删除。 
语法如下 
sp_GenInsert < Table Name >,< Stored Procedure Name > 
以northwind 数据库为例 
sp_GenInsert 'Employees', 'INS_Employees' 
最后会生成一个Insert存储过程。利用它,您可以作进一步的开发。 
Sp_GenUpdate 
它会为一个表生成update存储过程。语法如下: 
sp_GenUpdate < Table Name >,< Primary Key >,< Stored Procedure Name > 
以northwind 数据库为例 
sp_GenUpdate 'Employees','EmployeeID','UPD_Employees' 
运行后生成如下所示的存储过程: 
Create Procedure UPD_Employees 
@EmployeeID int 
@LastName nvarchar(40) , 
@FirstName nvarchar(20) , 
@Title nvarchar(60) , 
@TitleofCourtesy nvarchar(50) , 
@BirthDate datetime , 
@HireDate datetime , 
@Address nvarchar(120) , 
@City nvarchar(30) , 
@Region nvarchar(30) , 
@PostalCode nvarchar(20) , 
@Country nvarchar(30) , 
@HomePhone nvarchar(48) , 
@Extension nvarchar(8) , 
@Phote image , 
@Notes ntext , 
@ReportsTo int , 
@PhotoPath nvarchar(510) 
AS 
UPDATE Employees 
SET 
LastName = @LastName, 
FirstName = @FirstName, 
Title = @Title, 
TitleofCourtesy = @TitleofCourtesy, 
BirthDate = @BirthDate, 
HireDate = @HireDate, 
Address = @Address, 
City = @City, 
Regin = @Regin, 
PostalCode = @PostCode, 
Country = @Country, 
HomePhone = @HomePhone, 
Extension = @Extension, 
Photo = @Photo 
Notes = @Notes, 
ReportsTo = @ReportsTo, 
PhotoPath = @PhotoPath 
WHERE EmployeeID = @EmployeeID 
使用以上的两个存储过程,节省了我不少时间。特别是在改变了表结构后,重新构造各个存储过程的过程中。您可以改写这两个程序,来自动生成别的存储过程。

SQL Server编写存储过程小工具
以下是两个存储过程的源程序
/*===========================================================

语法: sp_GenInsert <Table Name>,<Stored Procedure Name>
以northwind 数据库为例
sp_GenInsert 'Employees', 'INS_Employees'

注释:如果您在Master系统数据库中创建该过程,那您就可以在您服务器上所有的数据库中使用该过程。

=============================================================*/

CREATE procedure sp_GenInsert
@TableName varchar(130),
@ProcedureName varchar(130)
as
set nocount on

declare @maxcol int,
@TableID int
--itlearner.com
set @TableID = object_id(@TableName)

select @MaxCol = max(colorder)
from syscolumns
where id = @TableID

select 'Create Procedure ' + rtrim(@ProcedureName) as type,0 as colorder into #TempProc
union
select convert(char(35),'@' + syscolumns.name)
+ rtrim(systypes.name)
+ case when rtrim(systypes.name) in ('binary','char','nchar','nvarchar','varbinary','varchar') then '(' + rtrim(convert(char(4),syscolumns.length)) + ')'
when rtrim(systypes.name) not in ('binary','char','nchar','nvarchar','varbinary','varchar') then ' '
end
+ case when colorder < @maxcol then ','
when colorder = @maxcol then ' '
end
as type,
colorder
from syscolumns
join systypes on syscolumns.xtype = systypes.xtype
where id = @TableID and systypes.name <> 'sysname'
union
select 'AS',@maxcol + 1 as colorder
union
select 'INSERT INTO ' + @TableName,@maxcol + 2 as colorder
union
select '(',@maxcol + 3 as colorder
union
select syscolumns.name
+ case when colorder < @maxcol then ','
when colorder = @maxcol then ' '
end
as type,
colorder + @maxcol + 3 as colorder
from syscolumns
join systypes on syscolumns.xtype = systypes.xtype
where id = @TableID and systypes.name <> 'sysname'
union
select ')',(2 * @maxcol) + 4 as colorder
union
select 'VALUES',(2 * @maxcol) + 5 as colorder
union
select '(',(2 * @maxcol) + 6 as colorder
union
select '@' + syscolumns.name
+ case when colorder < @maxcol then ','
when colorder = @maxcol then ' '
end
as type,
colorder + (2 * @maxcol + 6) as colorder
from syscolumns
join systypes on syscolumns.xtype = systypes.xtype
where id = @TableID and systypes.name <> 'sysname'
union
select ')',(3 * @maxcol) + 7 as colorder
order by colorder


select type from #tempproc order by colorder

drop table #tempproc

SQL Server编写存储过程小工具
功能:为给定表创建Update存储过程
语法: sp_GenUpdate <Table Name>,<Primary Key>,<Stored Procedure Name>
以northwind 数据库为例
sp_GenUpdate 'Employees','EmployeeID','UPD_Employees'

注释:如果您在Master系统数据库中创建该过程,那您就可以在您服务器上所有的数据库中使用该过程。

===========================================================*/
CREATE procedure sp_GenUpdate
@TableName varchar(130),
@PrimaryKey varchar(130),
@ProcedureName varchar(130)
as
set nocount on

declare @maxcol int,
@TableID int
--itlearner.com
set @TableID = object_id(@TableName)

select @MaxCol = max(colorder)
from syscolumns
where id = @TableID

select 'Create Procedure ' + rtrim(@ProcedureName) as type,0 as colorder into #TempProc
union
select convert(char(35),'@' + syscolumns.name)
+ rtrim(systypes.name)
+ case when rtrim(systypes.name) in ('binary','char','nchar','nvarchar','varbinary','varchar') then '(' + rtrim(convert(char(4),syscolumns.length)) + ')'
when rtrim(systypes.name) not in ('binary','char','nchar','nvarchar','varbinary','varchar') then ' '
end
+ case when colorder < @maxcol then ','
when colorder = @maxcol then ' '
end
as type,
colorder
from syscolumns
join systypes on syscolumns.xtype = systypes.xtype
where id = @TableID and systypes.name <> 'sysname'
union
select 'AS',@maxcol + 1 as colorder
union
select 'UPDATE ' + @TableName,@maxcol + 2 as colorder
union
select 'SET',@maxcol + 3 as colorder
union
select syscolumns.name + ' = @' + syscolumns.name
+ case when colorder < @maxcol then ','
when colorder = @maxcol then ' '
end
as type,
colorder + @maxcol + 3 as colorder
from syscolumns
join systypes on syscolumns.xtype = systypes.xtype
where id = @TableID and syscolumns.name <> @PrimaryKey and systypes.name <> 'sysname'
union
select 'WHERE ' + @PrimaryKey + ' = @' + @PrimaryKey,(2 * @maxcol) + 4 as colorder
order by colorder


select type from #tempproc order by colorder

drop table #tempproc
/*=======源程序结束=========*/

 


> 本站内容系网友提交或本网编辑转载,其目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请及时与本网联系,我们将在第一时间删除内容!

相关文章
  • Python实现的百度站长自动URL提交小工具
    这篇文章主要介绍了Python实现的百度站长自动URL提交小工具,主要难点在验证码识别部分,研究验证码识别的朋友可以参考下URL提交是百度提供的一个站长工具,用于给站长提供手工收录某些URL的接口,但是该接口有验证码识别部分,比较难弄.所以编写了如下程序进行验证码自动识别:主要思路获取多个验证码,提交到 http://lab.ocrking.com/ 进行多 ...
  • 用htajavascript写的定时重启或关机的小工具
    用htajavascript写的定时重启或关机的小工具
    Description: 一个用于定时重启或关闭计算机的小工具,适用于Windows 2K/XP/2003Author: 十一狼Email: [email protected]: 112183883-------------------------------------------------------------*/        </div ...
  • SendTo增强版批处理实用小工具
    因为个人原因有些时间没能来论坛了,辛苦 3742668 兄管理版面:又看到 willsort 兄暂时隐退的消息,挺怀念一起讨论的日子:同时祝贺 namejm 加入版主队伍.作为版主我觉得自己并不尽职.我将原先做的小东西整理细化了一下,作为国庆的小礼物送给大家.具体介绍可看下面的帮助文件.        这是我用批处理制作的小软件,其中涉及到的知识点有注册表的 ...
  • WordPress中使主题支持小工具以及添加插件启用函数
    WordPress中使主题支持小工具以及添加插件启用函数
    这篇文章主要介绍了WordPress中使主题支持widget以及添加插件启用函数的方法,使WP可以使用小工具widget与通过register_activation_hook来添加启用插件的函数,需要的朋友可以参考下让主题支持小工具WordPress 的小工具(widget)是一大特色,它让用户自由拖动组合内容,而且任何插件和主题都可以添加一个额外的小工具, ...
  • c语言中十进制转二进制显示小工具的实现代码
    本篇文章是对c语言中十进制转二进制显示小工具的实现代码进行了详细的分析的介绍,需要的朋友参考下计算器在显示二进制位数时候,如果开头是0.是不会显示的,对于在单片机混的人,这个有时候很麻烦,所以写个小工具. 功能就是输入十进制数字,然后显示出2进制,每显示4位一次空格,可以调整位数范围(8的倍数) 如果有谁能知道linux下类似win7的那个计算器,麻烦回复告 ...
猜你喜欢