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. 第一份开发工作,边学边做android

    我刚刚毕业,在培训学校学的Java web开发,虽然学的没有大学生那么丰富细致,没有他们理论基础扎实,但是这是我学习软件开发的唯一方式了. 从小学我学习就是倒数2.3等,所有人都认为我是个没法学习的孩 ...

  2. 利用bootstrap写的一点本地(localStorage)储存

    摘要: H5本地存储 在以前,我们想要存储一些数据,并且只是在前端使用,服务端并不会使用,我们只能存在cookie里,但是cookie会跟随请求头在客户端和服务端之间来回传递,而且cookie还有一些 ...

  3. Python shutil模块

    shutil模块下 copy(复制).rm(删除).move(移动) 常用方法举例. copyfileobj(fsrc, fdst[, length])copyfile(src, dst, *, fo ...

  4. webpack 3.X学习之初始构建

    webpack是什么 webpack可以看做是模块打包机:它做的事情是,分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Sass,TypeScript等),并 ...

  5. Python爬虫知识点四--scrapy框架

    一.scrapy结构数据 解释: 1.名词解析: o 引擎(Scrapy Engine)o 调度器(Scheduler)o 下载器(Downloader)o 蜘蛛(Spiders)o 项目管 ...

  6. Rigidbody组件及相关API

    Rigidbody:刚体组件,物理类.(与Rigidbody组件相关的代码尽量都写在FixedUpdate()方法中,如果写在Update()中有可能会卡顿) 属性:Mass:质量.         ...

  7. 《java.util.concurrent 包源码阅读》19 PriorityBlockingQueue

    前面讲ScheduledThreadPoolExecutor曾经重点讲到了DelayedWorkQueue,这里说的PriorityBlockingQueue其实是DelayedWorkQueue的简 ...

  8. 输入一个A和B,,A<=B,A>=1,B<=pow(10,18)计算F=B!/A!结果的最后一位

    *************************************************************************代理运行函数,判断结果,进行输出*********** ...

  9. Less的!important关键字

    Less的!important关键字 在调用 mixin 时,如果在后面追加 !important 关键字,就可以将 mixin 里面的所有属性都标记为 !important.如,以下Less代码: ...

  10. 第六届蓝桥杯软件类省赛题解C++/Java

    第六届蓝桥杯软件类省赛题解C++/Java 1[C++].统计不含4的数字统计10000至99999中,不包含4的数值个数.答:暴力循环范围内所有数字判断一下就是了,答案是52488 1[Java]. ...