标签:and creat 唯一性 sqlserver date 赋值语句 base 字符 引号
亲测可用
CREATE PROCEDURE [dbo].[UpdateMessage] @strTable varchar(50), --要修改的表 @strColumn varchar(500),--要修改的列名(如果有多个,用英文逗号分隔) @strValue varchar(500), --新的值(用英文逗号分隔,如果是字符串,需加单引号) @strWhere varchar(500) --where条件,不加wehere,直接 列名=值,如果值是字符串,需加单引号 as --变量 declare @sqlString nvarchar(4000); --完整的update语句 declare @whereString varchar(500); --where条件 declare @tempString varchar(5000); --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=1; set @prev=1; set @prev2=1; set @num=(len(@strValue)-len(replace(@strValue,‘,‘,‘‘)))+1; --开始循环处理 while ( @num > 0) begin --print @prev2 -- 1 10 15 --print @prev -- 1 9 18 set @curr_Column=charindex(‘,‘,@strColumn,@prev);--print @curr_Column -- 8 17 0 set @curr_Value= charindex(‘,‘,@strValue,@prev2);--print @curr_Value -- 9 14 0 if @num>1 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+1)+‘=‘+substring(@strValue,@prev2,len(@strValue)-@prev2+1); break; end set @num=@num-1; set @prev=@curr_Column+1; set @prev2=@curr_Value+1; 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(50), --要修改的表 @strColumn varchar(500),--要修改的列名(如果有多个,用英文逗号分隔) @strValue varchar(500), --新的值(用英文逗号分隔,如果是字符串,需加单引号) @strWhere varchar(500), --where条件,不加wehere,直接 列名=值,如果值是字符串,需加单引号 @only_field varchar(20)=null, --唯一性字段(列名) @only_value varchar(20)=null, --唯一性字段值 @msg nvarchar(50)=null, --错误消息 @not_self varchar(50)=null --排除自己这行 as BEGIN --变量 declare @sqlString nvarchar(4000); --完整的update语句 declare @whereString varchar(500); --where条件 declare @tempString varchar(5000); --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=1; set @prev=1; set @prev2=1; set @num=(len(@strValue)-len(replace(@strValue,‘,‘,‘‘)))+1; IF @only_field is not null BEGIN declare @p int; --查询唯一性结果 declare @sql nvarchar(1000); --拼接查询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 > 0 begin raiserror(@msg ,16,1) return end else begin --开始循环处理 while ( @num > 0) begin --print @prev2 -- 1 10 15 --print @prev -- 1 9 18 set @curr_Column=charindex(‘,‘,@strColumn,@prev);--print @curr_Column -- 8 17 0 set @curr_Value= charindex(‘,‘,@strValue,@prev2);--print @curr_Value -- 9 14 0 if @num>1 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+1)+‘=‘+substring(@strValue,@prev2,len(@strValue)-@prev2+1); break; end set @num=@num-1; set @prev=@curr_Column+1; set @prev2=@curr_Value+1; end set @sqlString = @sqlString+@tempString+@whereString; exec(@sqlString); end END ELSE BEGIN --开始循环处理 while ( @num > 0) begin --print @prev2 -- 1 10 15 --print @prev -- 1 9 18 set @curr_Column=charindex(‘,‘,@strColumn,@prev);--print @curr_Column -- 8 17 0 set @curr_Value= charindex(‘,‘,@strValue,@prev2);--print @curr_Value -- 9 14 0 if @num>1 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+1)+‘=‘+substring(@strValue,@prev2,len(@strValue)-@prev2+1); break; end set @num=@num-1; set @prev=@curr_Column+1; set @prev2=@curr_Value+1; 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‘,‘12999999‘,N‘会员卡号已存在,不能重复添加!‘,‘ID !=554711‘
标签:and creat 唯一性 sqlserver date 赋值语句 base 字符 引号
原文地址:http://www.cnblogs.com/zouke1220/p/7459294.html