请选择 进入手机版 | 继续访问电脑版
贠老师培训群:150322713    贠老师QQ:767708506

贠老师office培训-excel学习网

 找回密码
 立即注册
点击咨询贠老师
查看: 181|回复: 6

MSSQL Server编写存储过程小工具(三)

[复制链接]

607

主题

604

帖子

1909

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1909
发表于 2016-1-18 16:46:54 | 显示全部楼层 |阅读模式

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
  'knowsky.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
  /*=======源程序结束=========*/


回复

使用道具 举报

0

主题

914

帖子

61

积分

注册会员

Rank: 2

积分
61
发表于 2016-3-7 09:18:17 | 显示全部楼层
楼主不错
回复 支持 反对

使用道具 举报

0

主题

918

帖子

45

积分

注册会员

Rank: 2

积分
45
发表于 2016-8-17 11:26:26 | 显示全部楼层
楼主是好人哪,感谢分享,太棒了!
回复 支持 反对

使用道具 举报

0

主题

918

帖子

45

积分

注册会员

Rank: 2

积分
45
发表于 2017-3-18 14:21:25 | 显示全部楼层
楼主不错
回复 支持 反对

使用道具 举报

0

主题

731

帖子

57

积分

注册会员

Rank: 2

积分
57
发表于 2018-5-25 10:08:33 | 显示全部楼层
先收藏再学习,谢谢啦!
回复 支持 反对

使用道具 举报

2

主题

975

帖子

83

积分

注册会员

Rank: 2

积分
83
发表于 2018-8-25 16:29:20 | 显示全部楼层
赞赞
回复 支持 反对

使用道具 举报

3

主题

1016

帖子

53

积分

注册会员

Rank: 2

积分
53
发表于 2018-11-15 13:04:53 | 显示全部楼层
能再解释的细节一些吗,具体的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



陕ICP备15003731号  

贠老师培训 GMT+8, 2018-12-14 22:49 , Processed in 0.228400 second(s), 29 queries .

快速回复 返回顶部 返回列表