参照网上的一个存储过程,我改成以下:-----修改数据库记录
alter proc UpdateMessage
@strTable varchar(50),--要修改的表
@strColumn varchar(500),--要修改的记录的列名(用英文逗号分隔)
@strValue varchar(500),--新的值(用英文逗号分隔)
@strWhere varchar(500)--where条件
as
--变量
declare @sqlString nvarchar(4000)--完整的update语句
declare @whereString varchar(500)--where条件
declare @tempString varchar(50)--update语句中间的赋值语句
declare @curr_Column int--列名字符串的当前位置
declare @curr_Value int--值字符串的当前位置
declare @prev int--光标位置
--变量赋初值
set @sqlString = 'update '+@strTable+' set '
set @whereString = ' where '+@strWhere
set @tempString=''
set @curr_Column=1
set @prev=1
--开始循环处理
while  @prev < len(@strColumn)
begin
set @curr_Column=charindex(',',@strColumn,@prev)
set @curr_Value= charindex(',',@strValue,@prev)

if @curr_Column>@prev
@tempString = substring(@strColumn,@prev,@curr_Column-@prev)+'='+substring(@strValue,@prev,@curr_Value-@prev)+@tempString+','
else--最后一个
begin
@tempString =@tempString + substring(@strColumn,@prev,len(@strColumn)-@prev+1)+'='+substring(@strValue,@prev,len(@strValue)-@prev+1)
break
end
set @prev=@curr_Column+1
end
@sqlString = @sqlString+@tempString+@whereStringbegin try
begin tran
exec(@sqlString)
commit tran
end try
begin catch
rollback tran
end catch
一个update操作的存储过程,前台代码,只要给四个参数:表名,更改值的列名,新值,where条件。错误提示:消息 102,级别 15,状态 1,过程 UpdateMessage,第 28 行
'@tempString' 附近有语法错误。
消息 102,级别 15,状态 1,过程 UpdateMessage,第 36 行
'@sqlString' 附近有语法错误。在if 和else里面,字符串拼接有问题?那个@tempString 是update语句中set后面,where前面的赋值部分
@sqlstring是最后一个完整的update语句。sql语法不是很熟悉,它说有语法错误

解决方案 »

  1.   

    alter proc UpdateMessage
    @strTable varchar(50),--要修改的表
    @strColumn varchar(500),--要修改的记录的列名(用英文逗号分隔)
    @strValue varchar(500),--新的值(用英文逗号分隔)
    @strWhere varchar(500)--where条件
    as
    --变量
    declare @sqlString nvarchar(4000)--完整的update语句
    declare @whereString varchar(500)--where条件
    declare @tempString varchar(50)--update语句中间的赋值语句
    declare @curr_Column int--列名字符串的当前位置
    declare @curr_Value int--值字符串的当前位置
    declare @prev int--光标位置
    --变量赋初值
    set @sqlString = 'update '+@strTable+' set '
    set @whereString = ' where '+@strWhere
    set @tempString=''
    set @curr_Column=1
    set @prev=1
    --开始循环处理
    while  @prev < len(@strColumn)
    begin
        set @curr_Column=charindex(',',@strColumn,@prev)
        set @curr_Value= charindex(',',@strValue,@prev)
        
        if @curr_Column>@prev
            set @tempString = substring(@strColumn,@prev,@curr_Column-@prev)+'='+substring(@strValue,@prev,@curr_Value-@prev)+@tempString+','
        else--最后一个
            begin
                set @tempString =@tempString + substring(@strColumn,@prev,len(@strColumn)-@prev+1)+'='+substring(@strValue,@prev,len(@strValue)-@prev+1)
                break
            end    
        set @prev=@curr_Column+1
    end
    set @sqlString = @sqlString+@tempString+@whereStringbegin try
        begin tran
            exec(@sqlString)
        commit tran
    end try
    begin catch
        rollback tran
    end catch
      

  2.   


    好吧果然sql语法不熟练谢谢了~结贴!