简单通用的表删除、表查询
在用net的三层架构时,为了提高系统的可靠性和运行效率,所以系统实现多采用存储过程,然而由于系统功能较多,项目较大,有上千张数据表,这样不免会有很多的多简单表的操作(查询,删除,修改等)
所以为了避免重复的劳动和提高编程的效率,所以写了一个简单的通用的存储过程,拿出来和大家分享,如有问题,望各位同仁不吝赐教。
/*
作者:马万前
时间:2010-4-22
版本:Ver1.0
*/
Create PROCEDURE [dbo].[sp_Support_DeleteTableByFourKeys]
(
@execStatus int OUTPUT,
@tablename sysname,--表名称
@key sysname,--主键一
@value varchar(50),--主键一值
@key1 sysname,--主键二
@value1 varchar(50),--主键二值
@key2 sysname,--主键三
@value2 varchar(50),--主键三值
@key3 sysname,--主键四
@value3 varchar(50)--主键四值
)
AS
BEGIN
DECLARE @err INT
DECLARE @row INT
BEGIN TRANSACTION
BEGIN
declare @sql varchar(500)
set @sql = 'delete from '+@tablename+' where 1=1'
if @value<> ''
set @sql = @sql + ' and '+quotename(@key)+'='''+convert(varchar(50),@value)+''''
if @value1<> ''
set @sql = @sql + ' and '+quotename(@key1)+'='''+convert(varchar(50),@value1)+''''
if @value2<> ''
set @sql = @sql + ' and '+quotename(@key2)+'='''+convert(varchar(50),@value2)+''''
if @value3<> ''
set @sql = @sql + ' and '+quotename(@key3)+'='''+convert(varchar(50),@value3)+''''
print @sql
exec (@sql)
END
SELECT @err=@@ERROR, @row=@@ROWCOUNT
IF @@ERROR=0
BEGIN
SET @ExecStatus=0
COMMIT TRANSACTION
RETURN
END
ELSE
BEGIN
ROLLBACK TRANSACTION
SET @ExecStatus=1
RETURN
END
END
上面是删除,可以根据需要进行重写,我在系统中重写了四次。
下面是通用的查询脚本:
/*
版本:Ver1.0
作者:马万前
时间:2009-12-14
用途:通用的简单的表查询
*/
Create PROCEDURE sp_Support_SelectTableByOneKeys
(
@execStatus int OUTPUT,
@tablename sysname,--表名称,也可以是视图
@key sysname,--主键一
@value varchar(50)--主键一值
)
AS
BEGIN
DECLARE @err INT
DECLARE @row INT
BEGIN TRANSACTION
BEGIN
declare @sql varchar(1000)
set @sql = 'select * from '+quotename(@tablename)+' where 1=1'
if @value<> ''
set @sql = @sql + ' and '+quotename(@key)+'='''+convert(varchar(50),@value)+''''
print @sql
exec(@sql)
END
SELECT @err=@@ERROR, @row=@@ROWCOUNT
IF @@ERROR=0
BEGIN
SET @ExecStatus=0
COMMIT TRANSACTION
RETURN
END
ELSE
BEGIN
ROLLBACK TRANSACTION
SET @ExecStatus=1
RETURN
END
END,
备注:可以更加需要进行扩展,也可以基于此思想,完成修改,新增的储存过程,脚本就不上传了。