您好,欢迎来到意榕旅游网。
搜索
您的当前位置:首页关于sql server存储过程中单个或批量数据的增加、删除、修改操作方法

关于sql server存储过程中单个或批量数据的增加、删除、修改操作方法

来源:意榕旅游网
关于sql server存储过程中单个或批量数据的增加、删除、修改操作方法

举个简单的例子:

T_MYTEST表中有两个字段 ID NVARCHAR(50),NAME NVARCHAR(50)

界面参数设置:

ArrayList ParaSet = new ArrayList();

ArrayList ParaValue = new ArrayList(); ArrayList ParaKeyName = new ArrayList(); ArrayList SelectRowList = new ArrayList();

GetSelectItemInf(ref SelectRowList); //获得grid选择的行

foreach (Infragistics.Win.UltraWinGrid.UltraGridRow row in SelectRowList) {

ParaKeyName.Add(\"NULL\");//用来记录操作的记录条数 //注意参数名称和值成对添加

ParaSet.Add(\"EDITTYPE\"); //操作类型 ParaValue.Add(\"ADD\");

ParaSet.Add(\"ID\");//ID ParaValue.Add(row.Cells[\"ID\"].Value.ToString()); ParaSet.Add(\"NAME\");//NAME

ParaValue.Add(row.Cells[\"ID\"].Value.ToString()); }

int ParamCount = ParaKeyName.Count; //操作次数 string ParamName = string.Empty; //参数名称 string ParamValue = string.Empty; //参数值 for (int a = 0; a < ParaSet.Count; a++) {

//参数之间用▲分隔

ParamName = ParamName + ParaSet[a].ToString().Replace(\"▲\", \"\") + \"▲\"; ParamValue = ParamValue + ParaValue[a].ToString().Replace(\"▲\", \"\") + \"▲\"; }

//设置参数(@ParamCount, @ParamName, @ParamValue ,@ExeOutInf),

//然后再调用存储过程(我这就不写了) //删除、修改也类型 可以是单条或批量

数据库存储过程如下:

ALTER PROCEDURE [dbo].[sp_name] @ForCount INT,

--总循环次数

@ParamName NVARCHAR(MAX), @ParamValue NVARCHAR(MAX),

--名称 --值

@ExeOutInf NVARCHAR(100) OUT AS BEGIN

SET NOCOUNT ON;

--返回值

DECLARE @EditType NVARCHAR(100); --记录操作类型 DECLARE @ForNum INT; SET @ForNum = 1; --定义表所有列参数

DECLARE @L_id NVARCHAR(50); DECLARE @L_FLOG INT; --求所有参数的总长度

DECLARE @TotalNameCount INT; DECLARE @PosFlog INT;

--记录总数

--记录字符串中'▲'的位置 --记录操作字符串 --设置初始值为0 --设置初始值为1

--设置初始值为传进来的参数

--编号 --名称

--纪录是否存在标志位

DECLARE @L_name NVARCHAR(50);

--记录循环次数 --设置初始值

DECLARE @VarName NVARCHAR(MAX); SET @TotalNameCount = 0; SET @PosFlog = 1;

SET @VarName = @ParamName; @ParamName

--循环获取参数总个数 WHILE(@PosFlog > 0)

BEGIN

SET @PosFlog = PATINDEX('%▲%' ,@VarName); IF(@PosFlog > 1) BEGIN

SET @TotalNameCount = @TotalNameCount + 1; SET @VarName = SUBSTRING(@VarName ,@PosFlog +

1,LEN(@VarName));

END; END;

DECLARE @RecordParamLength INT; --单条纪录的长度 SET @RecordParamLength = @TotalNameCount/@ForCount; DECLARE @VarRecordParamLength INT; --单条记录循环变量 DECLARE @ColumnName NVARCHAR(MAX); --列名 BEGIN TRAN OperateTran;

--开始事务 --循环

WHILE(@ForNum <= @ForCount) BEGIN

SET @VarRecordParamLength = 0; --初始化 SET @ForNum = @ForNum + 1; --循环取单条记录的所有参数

--下一次循环

WHILE(@VarRecordParamLength < @RecordParamLength) BEGIN

SET @VarRecordParamLength = @VarRecordParamLength + 1; SET @ColumnName =

--获取各个参数的对应的值

IF(@ColumnName = 'EDITTYPE') BEGIN

SET @EditType =

SUBSTRING(@ParamName,0,PATINDEX('%▲%',@ParamName));

SUBSTRING(@ParamValue ,1 ,PATINDEX('%▲%' ,@ParamValue) - 1)

END;

IF(@ColumnName = 'ID') BEGIN

SET @L_id =

SUBSTRING(@ParamValue ,1 ,PATINDEX('%▲%' ,@ParamValue) - 1);

END;

IF(@ColumnName = 'NAME') BEGIN

SET @L_name =

SUBSTRING(@ParamValue ,1 ,PATINDEX('%▲%' ,@ParamValue) - 1);

END;

SET @ParamName = SET @ParamValue =

SUBSTRING(@ParamName ,PATINDEX('%▲%' ,@ParamName) + 1,LEN(@ParamName)); SUBSTRING(@ParamValue ,PATINDEX('%▲%' ,@ParamValue) + 1,LEN(@ParamValue));

END;

--添加

IF(@EditType = 'ADD') BEGIN

SET @L_FLOG = (SELECT COUNT(*)

FROM T_MYTEST WHERE ID = @L_ID);

IF(@L_FLOG = '1')

BEGIN

SET @ExeOutInf = '对不起,该记录信息已经存在.'; END; BEGIN

INSERT INTO T_MYTEST

(id,name) (@L_id,@L_name); VALUES

SET @ExeOutInf = 'NEWID:' + 'ID;' + @L_ID;

ELSE

END;

END;

--修改

IF(@EditType = 'EDIT') BEGIN

SET @L_FLOG = (SELECT COUNT(*)

FROM T_MYTEST WHERE ID = @L_ID);

IF(@L_FLOG = '0')

BEGIN

SET @ExeOutInf = '对不起,该记录信息不存在,不能进行修改.'; END; BEGIN

UPDATE T_MYTEST

SET id = @L_id,name = @L_name WHERE id = @L_id;

ELSE

END;

END;

--删除

IF(@EditType = 'DEL') BEGIN

SET @L_FLOG = (SELECT COUNT(*)

FROM T_MYTEST WHERE ID = @L_ID);

IF(@L_FLOG = '0')

BEGIN

SET @ExeOutInf = '对不起,该记录信息不存在,不能进行删除.'; END; BEGIN

DELETE T_MYTEST WHERE id = @L_id;

ELSE

END;

END;

END;

IF(@@Error > 0) --如果事务有错误,返回,表示为不成功 BEGIN

ROLLBACK TRAN OperateTran; return '0';

END

ELSE --否则执行事务,返回,表示成功 BEGIN

COMMIT TRAN;

END

return '1';

END

总结:用这种方法编写存储过程的一点好处:

1、增加、删除、修改方法放在同一个存储过程中; 2、可以进行单个或批量数据增加、删除、修改操作;

3、客户端调用存储过程方法统一,都是@ParamCount, @ParamName,

@ParamValue ,@ExeOutInf四个参数, 可以把它分离出一个方法。

注:以上纯属个人意见。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- yrrf.cn 版权所有 赣ICP备2024042794号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务