CREATE PROCEDURE [dbo].[UpdateMessage]
@strTable varchar(), --要修改的表
@strColumn varchar(),--要修改的列名(如果有多个,用英文逗号分隔)
@strValue varchar(), --新的值(用英文逗号分隔,如果是字符串,需加单引号)
@strWhere varchar() --where条件,不加wehere,直接 列名=值,如果值是字符串,需加单引号
as
--变量
declare @sqlString nvarchar(); --完整的update语句
declare @whereString varchar(); --where条件
declare @tempString varchar(); --update语句中间的赋值语句
declare @curr_Column int; --列名字符串的当前位置
declare @curr_Value int; --值字符串的当前位置
declare @prev int; --光标位置
declare @prev2 int; --光标位置
declare @num int; --字段个数
--变量赋初值
set @sqlString = 'update '+@strTable+' set ';
set @whereString = ' where '+@strWhere;
set @tempString='';
set @curr_Column=;
set @prev=;
set @prev2=;
set @num=(len(@strValue)-len(replace(@strValue,',','')))+;
--开始循环处理
while ( @num > )
begin
--print @prev2 --
--print @prev --
set @curr_Column=charindex(',',@strColumn,@prev);--print @curr_Column --
set @curr_Value= charindex(',',@strValue,@prev2);--print @curr_Value --
if @num>
set @tempString = substring(@strColumn,@prev,@curr_Column-@prev)+'='+substring(@strValue,@prev2,@curr_Value-@prev2)+',' +@tempString;
else--最后一个
begin
set @tempString =@tempString + substring(@strColumn,@prev,len(@strColumn)-@prev+)+'='+substring(@strValue,@prev2,len(@strValue)-@prev2+);
break;
end
set @num=@num-;
set @prev=@curr_Column+;
set @prev2=@curr_Value+;
end
set @sqlString = @sqlString+@tempString+@whereString;
exec(@sqlString); --execute [dbo].[UpdateMessage] 'base._Member',"AcctNbr","'999999'",'ID=554585'
--execute [dbo].[UpdateMessage] 'base._Member','AcctNbr,AcctName,AcctPswd1',"'999999','zz','852852'",'ID=554585'
CREATE PROCEDURE [dbo].[UpdateMessage]
@strTable varchar(), --要修改的表
@strColumn varchar(),--要修改的列名(如果有多个,用英文逗号分隔)
@strValue varchar(), --新的值(用英文逗号分隔,如果是字符串,需加单引号)
@strWhere varchar(), --where条件,不加wehere,直接 列名=值,如果值是字符串,需加单引号
@only_field varchar()=null, --唯一性字段(列名)
@only_value varchar()=null, --唯一性字段值
@msg nvarchar()=null, --错误消息
@not_self varchar()=null --排除自己这行
as
BEGIN
--变量
declare @sqlString nvarchar(); --完整的update语句
declare @whereString varchar(); --where条件
declare @tempString varchar(); --update语句中间的赋值语句
declare @curr_Column int; --列名字符串的当前位置
declare @curr_Value int; --值字符串的当前位置
declare @prev int; --光标位置
declare @prev2 int; --光标位置
declare @num int; --字段个数
--变量赋初值
set @sqlString = 'update '+@strTable+' set ';
set @whereString = ' where '+@strWhere;
set @tempString='';
set @curr_Column=;
set @prev=;
set @prev2=;
set @num=(len(@strValue)-len(replace(@strValue,',','')))+;
IF @only_field is not null
BEGIN
declare @p int; --查询唯一性结果
declare @sql nvarchar(); --拼接查询sql字串
set @sql='SELECT @p=count(1) FROM ' +@strTable+' WHERE ' +@only_field+'='+@only_value+' AND '+@not_self;
exec sp_executesql @sql,N'@p AS int OUTPUT',@p OUTPUT if @p >
begin
raiserror(@msg ,,)
return
end
else
begin
--开始循环处理
while ( @num > )
begin
--print @prev2 --
--print @prev --
set @curr_Column=charindex(',',@strColumn,@prev);--print @curr_Column --
set @curr_Value= charindex(',',@strValue,@prev2);--print @curr_Value --
if @num>
set @tempString = substring(@strColumn,@prev,@curr_Column-@prev)+'='+substring(@strValue,@prev2,@curr_Value-@prev2)+',' +@tempString;
else--最后一个
begin
set @tempString =@tempString + substring(@strColumn,@prev,len(@strColumn)-@prev+)+'='+substring(@strValue,@prev2,len(@strValue)-@prev2+);
break;
end
set @num=@num-;
set @prev=@curr_Column+;
set @prev2=@curr_Value+;
end
set @sqlString = @sqlString+@tempString+@whereString;
exec(@sqlString);
end
END
ELSE
BEGIN
--开始循环处理
while ( @num > )
begin
--print @prev2 --
--print @prev --
set @curr_Column=charindex(',',@strColumn,@prev);--print @curr_Column --
set @curr_Value= charindex(',',@strValue,@prev2);--print @curr_Value --
if @num>
set @tempString = substring(@strColumn,@prev,@curr_Column-@prev)+'='+substring(@strValue,@prev2,@curr_Value-@prev2)+',' +@tempString;
else--最后一个
begin
set @tempString =@tempString + substring(@strColumn,@prev,len(@strColumn)-@prev+)+'='+substring(@strValue,@prev2,len(@strValue)-@prev2+);
break;
end
set @num=@num-;
set @prev=@curr_Column+;
set @prev2=@curr_Value+;
end
set @sqlString = @sqlString+@tempString+@whereString;
exec(@sqlString);
END
END --execute [dbo].[UpdateMessage] 'base._Member','AcctNbr,AcctName,AcctPswd1',"'2999999','zz','852852'",'ID=554710',NULL,NULL,NULL,NULL
--execute [dbo].[UpdateMessage] 'base._Member','AcctNbr,AcctName,AcctPswd1',"'12999999','zz','852852'",'ID=554711','AcctNbr','',N'会员卡号已存在,不能重复添加!','ID !=554711'
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- 邹柯
ALTER PROCEDURE CollegeUpdate
(
@ceid varchar()=null
,@username nvarchar()=null
,@cardid varchar()=null
,@age int=null
,@sex NChar()
,@image_path VarChar()=null
,@job_base_id int=null
,@level_base_id int=null
,@certificateid VarChar()=null
,@certificate_path VarChar()=null
,@BeginTime DateTime=null
,@EndTime DateTime=null
)
WITH ENCRYPTION
AS
BEGIN
SET NOCOUNT ON;
SET XACT_ABORT ON;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN TRY
BEGIN TRAN;
--先查询修改的用户id
declare @userid int=null;
select @userid=TutorId from Certificate where Id=@ceid; -- Update Certificate
update Certificate set
TutorId=@userid,
JobId=@job_base_id,
LevelId=@level_base_id,
BeginTime=@BeginTime,
EndTime=@EndTime,
Id=@certificateid,
ImageUrl=@certificate_path
where Id=@ceid -- Update Tutor
update Tutor set
Name=@username,
IdentityCard=@cardid,
Age=@age,
Gender=@sex,
Photo=@image_path
where Id=@userid COMMIT TRAN;
END TRY
BEGIN CATCH
ROLLBACK TRAN; throw;
END CATCH
END /*
USE [GmkCollege]
GO DECLARE @return_value int EXEC @return_value = CollegeUpdate
@ceid = 1,
@username = '测试123456',
@cardid = '测试123456',
@age = 98,
@sex = '男',
@image_path = '测试123456',
@job_base_id = 2,
@level_base_id = 2,
@certificateid = '测试123456',
@certificate_path = '测试123456',
@BeginTime='2016-06-06',
@EndTime='2017-01-01', SELECT 'Return Value' = @return_value GO
*/

sqlserver 存储过程 修改的更多相关文章

  1. SQLServer之修改存储过程

    修改存储过程注意事项 只能修改先前在 SQL Server 中通过执行 CREATE PROCEDURE 语句创建的过程. Transact-SQL 存储过程修改为 CLR 存储过程,反之亦然. AL ...

  2. SqlServer存储过程学习笔记(增删改查)

    * IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值. CREATE PROCEDURE [dbo].[PR_NewsAffiche_AddNewsEntity] ( ...

  3. SQLServer Alter 修改表的列名的解决

    解决:在SQLServer中修改表的列名,可以调用存储过程sp_rename. [sql]use Test;--使用数据库  sp_rename 'd_s_t.avg_grade','avg_g',' ...

  4. SQLSERVER存储过程语法详解

    CREATE PROC [ EDURE ] procedure_name [ ; number ] [ { @parameter data_type } [ VARYING ] [ = default ...

  5. SqlServer存储过程详解

    SqlServer存储过程详解 1.创建存储过程的基本语法模板: if (exists (select * from sys.objects where name = 'pro_name')) dro ...

  6. SqlServer存储过程(增删改查)

    * IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值. CREATE PROCEDURE [dbo].[PR_NewsAffiche_AddNewsEntity] ( ...

  7. SQLSERVER存储过程的基本语法实例

    SQLSERVER存储过程的基本语法实例 SQLSERVER存储过程的基本语法实例 一.定义变量--简单赋值 declare @a intset @a=5 print @a --使用select语句赋 ...

  8. SqlServer存储过程的创建与使用

    什么是存储过程? T-SQL中的存储过程,非常类似于net语言中的方法,它可以重复调用.当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句. 这样就可以提高存储过程的性能. ...

  9. Sqlserver 存储过程

    转载自:http://www.cnblogs.com/hoojo/archive/2011/07/19/2110862.html Transact-SQL中的存储过程,非常类似于Java语言中的方法, ...

随机推荐

  1. 翻译连载 | 附录 A:Transducing(下)-《JavaScript轻量级函数式编程》 |《你不知道的JS》姊妹篇

    原文地址:Functional-Light-JS 原文作者:Kyle Simpson-<You-Dont-Know-JS>作者 关于译者:这是一个流淌着沪江血液的纯粹工程:认真,是 HTM ...

  2. window.location.href跳转至空白页

    现象:window.location.href = "XXX"调到了空白页,但是将XXX在窗口地址栏输入就会可以访问到. 原因:就是XXX前缀没有加上"http://&q ...

  3. CORS(跨站资源共享)介绍

    起因 有同学在nginx站点配置中加了一行Access-Control-Allow-Origin *,导致微信中业务数据异常,抓包看http头有两个Access-Control-Allow-Origi ...

  4. Mybatis分页插件PageHelper使用

    一. Mybatis分页插件PageHelper使用  1.不使用插件如何分页: 使用mybatis实现: 1)接口: List<Student> selectStudent(Map< ...

  5. SSD: Single Shot MultiBoxDetector英文论文翻译

    SSD英文论文翻译 SSD: Single Shot MultiBoxDetector 2017.12.08    摘要:我们提出了一种使用单个深层神经网络检测图像中对象的方法.我们的方法,名为SSD ...

  6. Linux磁盘分区(二):删除

    ***********************************************声明************************************************ 原创 ...

  7. C++反汇编第四讲,反汇编中识别继承关系,父类,子类,成员对象

    C++反汇编第四讲,反汇编中识别继承关系,父类,子类,成员对象 讲解目录: 1.各类在内存中的表现形式   备注: 主要复习开发知识,和反汇编没有关系,但是是理解反汇编的前提.     2.子类继承父 ...

  8. Akka(41): Http:DBTable-rows streaming - 数据库表行交换

    在前面一篇讨论里我们介绍了通过http进行文件的交换.因为文件内容是以一堆bytes来表示的,而http消息的数据部分也是byte类型的,所以我们可以直接用Source[ByteString,_]来读 ...

  9. macOS安装beego的使用bee命令出现killed:9 解决办法

    最近想搞一个restful api,发现go还是不错的,拿来研究下 beego文档:https://beego.me/quickstart 安装之后,执行bee命令,报错如下: 应该是最新mac OS ...

  10. otter双A同步配置

    otter双A配置 最近做跨国服务器的数据同步,用了阿里的otter开源框架,遇到了不少问题,写一下文档为以后做参考. 第一步: 下载所需的文件 :otter,zookeeper,aria2 otte ...