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. "逃离北京"的这些年 2

    一  找工作第二阶段 我为了保险,在辞职信还特别写了:特此提前一个月提出辞职. 果然是搞金融的,C公司在我提交辞职信后,一周内就让我整理好工作资料,办好辞职手续. 没关系,都是要走的人.早点离开也是好 ...

  2. 【Java入门提高篇】Day5 Java中的回调(二)

    Java中有很多个Timer,常用的有两个Timer类,一个java.util包下的Timer,一个是javax.swing包下的Timer,两个Timer类都有用到回调机制.可以使用它在到达指定时间 ...

  3. MySQL .msi 安装失败改用.zip安装步骤

    一开始官网下载.msi安装包,安装到配置server时无法启动,长时间卡在这里,无法继续下去.上网看了一下解决办法,发现用.zip安装包进行安装比较简单可靠. 一.利用.msi安装包安装失败后的处理 ...

  4. python 正则空格\xa0实录 与xpath取 div 里面的含多个标签的所有文字

    业余玩爬虫时,由原先的原生写法 改为 scrapy框架了,使用自带的selector时,xpath配合正则来抓取回复数和阅读数的时候,遇到的小问题,mark下. 首先获取到 我需要的数据块,(我用sc ...

  5. Cannot load browser "PhantomJS": it is not registered! Perhaps you are missing some plugin? 测试安装遇到的BUG

    安装了半天phantomjs就是安装不好,后面想了个死办法,http://phantomjs.org/download.html这个网址下先去下载好 phantomjs-2.1.1-windows.z ...

  6. Python测试开发之random模块

    random模块是一个生成随机数.随机字符的模块,平时被使用的也非常多,下面是random模块的常用方法: random.random()生成一个0-1的随机小数,如果想要对随机小数保留两位小数,可以 ...

  7. JavaScript--我发现,原来你是这样的JS:函数表达式和闭包

    一.介绍 本次博客主要介绍函数表达式的内容,主要是闭包. 二.函数表达式 定义函数的两种方式:一个是函数声明,另一个就是函数表达式. //1.函数声明写法 function fn2(){ consol ...

  8. 04.redis集群+SSM整合使用

    redis集群+SSM整合使用 首先是创建redis-cluster文件夹: 因为redis最少需要6个节点(三主三从),为了更好的理解,我这里创建了两台虚拟机(192.168.0.109 192.1 ...

  9. google软件测试之道读后感(一)

    这几天在抽空读一本新书,久负盛名的<google软件测试之道>.之前在网络上一点一点地看过它的英文版,很受触动,还做了很长的读书笔记,现在看到了中文版,才恍觉之前的好些理解存在不恰当的地方 ...

  10. Vue 事件

    一.事件冒泡 方法一.使用event.cancelBubble = true来阻止冒泡 <div @click="show2()"> <input type=&q ...