sql生成(插入、修改、删除数据的存储过程)代码的存储过程

简介: GO /****** 对象: StoredProcedure [dbo].[pro_GenerateProSet] 脚本日期: 08/03/2012 11:26:43 ******/ IF EXISTS (SELECT * FROM sys.
GO
/****** 对象:  StoredProcedure [dbo].[pro_GenerateProSet]    脚本日期: 08/03/2012 11:26:43 ******/
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[pro_GenerateProSet]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[pro_GenerateProSet]
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/*****************************************************
** DECRIPTION: 生成(插入、修改、删除数据的存储过程)代码的存储过程
** VERSION      AUTH          DATE          Defect No			DESC
** --------  ------------  ------------  -----------------   ------------------------------
** V000.0.1    pukuimin     08/03/2012							新建程序						
** --------  ------------  ------------  -----------------   -------------------------------
*******************************************************/
create procedure [dbo].[pro_GenerateProSet](
					@TbName NVARCHAR(200) ---表名
)
as
begin
DECLARE @TableName     NVARCHAR(200)  --表名
DECLARE @Parameters     VARCHAR(8000)  --所有参数
DECLARE @UpdateFields     VARCHAR(8000) --更新参数(无主键和唯一键)
DECLARE @InsertFields     VARCHAR(8000) --插入列(无唯一键)
DECLARE @InsertParams     VARCHAR(8000) --插入参数(无唯一键)
DECLARE @PrimaryKey     NVARCHAR(200)  --主键
DECLARE @UniqueColumn     NVARCHAR(200)  --唯一键

SELECT @TableName = @TbName,@Parameters = '', @UpdateFields = '',@InsertParams='',@InsertFields='',@UniqueColumn=''

if isnull(@TableName,'')=''
begin
	print '表名不能为空!'
	return 0
end 
----找表的主键
SELECT @PrimaryKey =  [dbo].[fun_get_PrimaryKey](@TableName)

if isnull(@PrimaryKey,'')=''
begin
	print '没有找到表主键!'
	set @PrimaryKey=''
	return 0
end 

select @UniqueColumn = [dbo].[fun_get_unique_column](@TableName)


----输出存储过程名
PRINT 'CREATE PROCEDURE dbo.pro_set_'+dbo.fun_get_UpperFirst(@tablename)+'('
PRINT dbo.fun_get_tabspace(1)+'@opr_typ int , ---- 1:新增 2: 修改 3:删除'

----全部参数
SELECT @Parameters = @Parameters + dbo.fun_get_tabspace(1)+'@'+COLUMN_NAME+' '+
        DATA_TYPE+dbo.fun_get_column_length(@TableName,COLUMN_NAME)
+','+CHAR(10)   ---- CHAR(10)就是一个换行符
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @TableName --AND COLUMN_NAME != @PrimaryKey

set @Parameters=LEFT(@Parameters,LEN(@Parameters)-2) ----去掉最后一个 ‘,’ 和 换行符

---插入参数
SELECT @InsertParams = @InsertParams + dbo.fun_get_tabspace(3)+'@'+COLUMN_NAME+' '+','+CHAR(10) -- CHAR(10)为换行符
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @TableName AND COLUMN_NAME != @UniqueColumn

set @InsertParams=LEFT(@InsertParams,LEN(@InsertParams)-2) ----去掉最后一个 ‘,’ 和 换行符
set @InsertFields=Replace(@InsertParams,'@','')

PRINT @Parameters
PRINT ')'
PRINT 'AS'
PRINT 'BEGIN'
	print dbo.fun_get_tabspace(1)+'if @opr_typ=1  ---新增'
		print dbo.fun_get_tabspace(2)+'begin'
		print dbo.fun_get_tabspace(2)+'INSERT INTO ' + @TableName+'('
		print @InsertFields
		print dbo.fun_get_tabspace(3)+')'
		print dbo.fun_get_tabspace(2)+'VALUES('
		print @InsertParams
		print dbo.fun_get_tabspace(3)+')'
		print dbo.fun_get_tabspace(3)+'select  SCOPE_IDENTITY() as autocolumn'
		print dbo.fun_get_tabspace(2)+'end'
	print dbo.fun_get_tabspace(1)+'else'
	print dbo.fun_get_tabspace(1)+'if @opr_typ=2  ---修改'
		print dbo.fun_get_tabspace(2)+'begin'
		PRINT dbo.fun_get_tabspace(2)+'UPDATE ' + @TableName
		PRINT dbo.fun_get_tabspace(2)+'SET'

		SELECT @UpdateFields = @UpdateFields +dbo.fun_get_tabspace(3)+COLUMN_NAME +' = @'+ COLUMN_NAME +','+ CHAR(10)
		FROM INFORMATION_SCHEMA.COLUMNS
		WHERE TABLE_NAME = @TableName AND COLUMN_NAME != @PrimaryKey and COLUMN_NAME !=@UniqueColumn

		PRINT LEFT(@UpdateFields,LEN(@UpdateFields) -2)
		PRINT dbo.fun_get_tabspace(2)+'WHERE'
		PRINT dbo.fun_get_tabspace(3)+ @PrimaryKey +' = @' + @PrimaryKey
		print dbo.fun_get_tabspace(1)+'end'
	print dbo.fun_get_tabspace(1)+'else'
	print dbo.fun_get_tabspace(1)+'if @opr_typ=3  ---根据主键删除'
		print dbo.fun_get_tabspace(2)+'begin'
print dbo.fun_get_tabspace(2)+'DELETE FROM ' + @TableName
print dbo.fun_get_tabspace(3)+'where '
 PRINT dbo.fun_get_tabspace(3)+ @PrimaryKey +' = @' + @PrimaryKey
		print dbo.fun_get_tabspace(2)+'end'
PRINT 'END'
end
/*

exec pro_GenerateProSet 'stuinfo'

select * from INFORMATION_SCHEMA.COLUMNS where table_name='stuinfo'

fn_Trace_Gettable
*/

相关文章
|
SQL 自然语言处理 数据库
【Azure Developer】分享两段Python代码处理表格(CSV格式)数据 : 根据每列的内容生成SQL语句
本文介绍了使用Python Pandas处理数据收集任务中格式不统一的问题。针对两种情况:服务名对应多人拥有状态(1/0表示),以及服务名与人名重复列的情况,分别采用双层for循环和字典数据结构实现数据转换,最终生成Name对应的Services列表(逗号分隔)。此方法高效解决大量数据的人工处理难题,减少错误并提升效率。文中附带代码示例及执行结果截图,便于理解和实践。
351 5
|
存储 SQL 数据库
SQL Server存储过程的优缺点
【10月更文挑战第18天】SQL Server 存储过程具有提高性能、增强安全性、代码复用和易于维护等优点。它可以减少编译时间和网络传输开销,通过权限控制和参数验证提升安全性,支持代码共享和复用,并且便于维护和版本管理。然而,存储过程也存在可移植性差、开发和调试复杂、版本管理问题、性能调优困难和依赖数据库服务器等缺点。使用时需根据具体需求权衡利弊。
455 1
|
存储 SQL 数据库连接
C#程序调用Sql Server存储过程异常处理:调用存储过程后不返回、不抛异常的解决方案
本文分析了C#程序操作Sql Server数据库时偶发的不返回、不抛异常问题,并提出了解决思路。首先解析了一个执行存储过程的函数`ExecuteProcedure`,其功能是调用存储过程并返回影响行数。针对代码执行被阻塞但无异常的情况,文章总结了可能原因,如死锁、无限循环或网络问题等。随后提供了多种解决方案:1) 增加日志定位问题;2) 使用异步操作提升响应性;3) 设置超时机制避免阻塞;4) 利用线程池分离主线程;5) 通过信号量同步线程;6) 监控数据库连接状态确保可用性。这些方法可有效应对数据库操作中的潜在问题,保障程序稳定性。
886 11
|
SQL Java 数据库连接
如何在 Java 代码中使用 JSqlParser 解析复杂的 SQL 语句?
大家好,我是 V 哥。JSqlParser 是一个用于解析 SQL 语句的 Java 库,可将 SQL 解析为 Java 对象树,支持多种 SQL 类型(如 `SELECT`、`INSERT` 等)。它适用于 SQL 分析、修改、生成和验证等场景。通过 Maven 或 Gradle 安装后,可以方便地在 Java 代码中使用。
4931 11
|
存储 SQL 数据库
SQL Server存储过程的优缺点
【10月更文挑战第17天】SQL Server 存储过程是预编译的 SQL 语句集,存于数据库中,可重复调用。它能提高性能、增强安全性和可维护性,但也有可移植性差、开发调试复杂及可能影响数据库性能等缺点。使用时需权衡利弊。
365 3
|
存储 SQL 缓存
SQL Server存储过程的优缺点
【10月更文挑战第22天】存储过程具有代码复用性高、性能优化、增强数据安全性、提高可维护性和减少网络流量等优点,但也存在调试困难、移植性差、增加数据库服务器负载和版本控制复杂等缺点。
702 1
|
存储 SQL 数据库
Sql Server 存储过程怎么找 存储过程内容
Sql Server 存储过程怎么找 存储过程内容
889 1
|
SQL 监控 关系型数据库
SQL错误代码1303解析与处理方法
在SQL编程和数据库管理中,遇到错误代码是常有的事,其中错误代码1303在不同数据库系统中可能代表不同的含义
|
存储 SQL 安全
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")