刚刚学存储过程,在查询分析器里运行通过,但是StudentInfo里没有被更新存储过程:
CREATE PROCEDURE Myupdate
@Scorename varchar(20),
@Score numeric(5),
@SuID int
as 
begin
BEGIN TRANSACTION
update StudentInfo set @Scorename=@Score where SI_ID_N=@SuID
IF @@Error<>0
 goto  Errorhandle
COMMIT TRANSACTION
RETURN 0
Errorhandle:
ROLLBACK TRANSACTION
RETURN 1
end
GO测试:
Declare @Scorename varchar(20)
Declare @Score numeric(5)
Declare @SuID intset @Scorename='score1'
set @Score=8
set @SuID=3exec Myupdate @Scorename,@Score,@SuID

解决方案 »

  1.   

    update StudentInfo set @Scorename=@Score where SI_ID_N=@SuID
    改為
    EXEC('update StudentInfo set ' +@Scorename +' = ' + Rtrim(@Score) + ' where SI_ID_N= ' + Rtrim(@SuID))
      

  2.   

    字段名是動態的需要使用動態SQL語句.
      

  3.   

    不行啊,提示Rtrim附近有语法错误
      

  4.   

    不好意思,再試下Declare @S Varchar(8000)
    Select @S='update StudentInfo set ' +@Scorename +' = ' + Rtrim(@Score) + ' where SI_ID_N= ' + Rtrim(@SuID)
    EXEC(@S)
      

  5.   


    alter PROCEDURE Myupdate
    @Scorename varchar(20),
    @Score numeric(5),
    @SuID int
    as 
    begin
    BEGIN TRANSACTIONdeclare @str varchar(8000)
    set @str ='update StudentInfo set ' 
    +@Scorename +' = '+rtrim(@Score)
     + ' where SI_ID_N= '+rtrim(@SuID)exec(@str) 
    IF @@Error<>0
    goto  Errorhandle
    COMMIT TRANSACTION
    RETURN 0
    Errorhandle:
    ROLLBACK TRANSACTION
    RETURN 1
    end
    GO