自动生成对一个数据表的插入和更新的存储过程
我找到了两个存储过程,能自动生成对一个数据表的插入和更新的存储过程,现在奉献给大家!


插入:
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
更新:
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?