交友约会| 杂志期刊| 小说| 论坛| 电影下载| 两性知识| 电脑知识| 汽车| 旅游| 收藏
频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

SQL Server编写存储过程小工具

来源: 作者: 出处:综艺读书 2006-07-26 进入讨论组
关 键 词:数据库  服务器  存储过程  sql server  os  

  在开发数据库系统的过程中,经常要写很多的存储过程。为了统一格式和简化开发过程,我编写一些存储过程,用来自动生成存储过程。下面就为您简单介绍一下它们。其中一个用于生成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
  
  
  使用以上的两个存储过程,节省了我不少时间。特别是在改变了表结构后,重新构造各个存储过程的过程中。您可以改写这两个程序,来自动生成别的存储过程。
  以下是两个存储过程的源程序
  /*==================================================================
  
  语法: sp_GenInsert ,
  以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
  
  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
  功能:为给定表创建Update存储过程
  语法: sp_GenUpdate
,,
  以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
  
  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
  /*===============源程序结束==================*/ 更多文章 更多内容请看SQL Server  SQL Server  SQL Server 数据处理专题专题,或进入讨论组讨论。
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
综艺读书宗旨
相关专题
·SQL Server 数据处理专题 (1441篇文章)
·SQL Server 索引和查询专题 (2635篇文章)
·SQL Server (1404篇文章)
·存储过程 (1683篇文章)
·网络存储—光纤通道 (1710篇文章)
·服务器存储专栏 (6220篇文章)
·sql 存储过程 (79篇文章)
·SQL Server (1405篇文章)
热点标签: 数据库  服务器  存储过程  sql server  os  
最新技术文档
站内各频道最新更新文档
百度品牌战略副总裁梁冬离职
Google CEO个人安全一年53万
段永平:跟巴菲特吃饭是想给他捧个场
Photoshop调节反转负冲效果
·托管服务市场:服务需求大
·同方服务器让你的网吧更红
·金蝶K3让利百货业绩翻翻
·东软证券数据系统解决方案
·金融系统广域网解决方案
·IBM:金融市场策略解决方案
·证券行业交易平台解决方案
·三星人寿保险Sybase案例
·东软商业保险系统解决方案
·CSO向Sun平台应用移植解决..
·东软税务全面整体解决方案
·珠海国地税KILL安全系统案例
·友讯:D-Link助昆明市公安..
·江苏邮政票据打印机系统方案
·浪潮:云南国税备份系统案例
·CSS 标签属性
站内最新制作专题
热门关键字导读
站内频道文章精选
百度推荐,商机无限
搜索您感兴趣的内容
Web 全站
综艺电脑频道编辑信箱  告诉我们您想看的专题或文章

友情互链 | 收藏本站 | 联系我们 | 在线留言 | 京ICP备08008424号|