基于声明的变量进行Transact SQL UPDATE

时间:2017-11-16 21:05:06

标签: sql-server tsql

我有两个名为ALUMNOALUMNO_GENERAL的表。

我想创建一个存储过程,通过查看声明为存储过程参数的变量@campo来自动选择要更新的表。

当我执行下面的过程时,它会显示1 row affected,但不会更新表的值。

exec updateAl 'CALLE','0015','ROJO'

存储过程:

create procedure updateAl

    @campo varchar(30), @matr varchar(10), @newVal varchar(15)
    as begin

    if @campo  IN ('AP_PATERNO' , 'AP_MATERNO', 'NOMBRE', 'GRUPO', 'TURNO' , 'SEMESTRE' , 'STATUS' , 'NUMEMPLEADO') 

    begin
        select @campo
        declare @sql varchar (1000)

        select @sql= 'update alumno set '+ @campo+'='+@newVal +' where MATRICULA='+@matr
        exec(@sql)
    end
    else
         update ALUMNO_GENERAL set @campo =@newVal where MATRICULA=@matr
end 

1 个答案:

答案 0 :(得分:1)

你的动态sql不正确,试试这个:

select @sql= 'update alumno set '+ @campo+'='''+@newVal +''' where MATRICULA='''+@matr + '''
exec(@sql)
end