解决方案 »

  1.   

    declare多贴上来了一个另外,字符串的变量放到 字符串里面的时候 要用单撇号 括起来
      

  2.   

    BEGIN
                SET @SQLStr2='UPDATE @TableName SET CHECKSTATETIMES=CONVERT(varchar(50), GETDATE(), 20),CHECKUSERID=@CHECKUSERID,CHECKUSERNAME=
                @CHECKUSERNAME,APPROVALRESULT=@ApprovalResultFieldVal,APPROVALREASON=@APPROVALREASON,STAMPTIME=CONVERT(varchar(50), GETDATE(), 20),STAMPRENID=
                @CHECKUSERID,STAMPREN=@CHECKUSERNAME where SYSID='''+@keyval+''''
                 Exec sp_executesql @SQLStr2
                 set @intError_S1 = @@ERROR
             END是这样吗?运行后还是不行,表中的字段还是没有修改,update没执行!
      

  3.   

    動態語句的使用方法(exec/sp_executesql)
    http://blog.csdn.net/roy_88/article/details/3020586
      

  4.   

    这个存储过程中最后返回的值是我要的1,但是里面的update还是没有执行(表中的几个字段没有修改),请各位高手帮忙看看那里出错了!ALTER PROCEDURE [dbo].[sp_rwy_SealContractApprovel] 
    (
        @TableName nvarchar(100), --申请审批表名称
        @keyval nvarchar(50), --申请表主键     
        @ApprovalResultFieldVal nvarchar(50), --审批结果字典     
        @CHECKSTATETIMES datetime,--审批时间
        @CHECKUSERID nvarchar(50),--审批人ID
        @CHECKUSERNAME nvarchar(50),--审批人
        @APPROVALREASON nvarchar(100) --审批备注
    )AS
       declare @CONTRACTNOTYPE nvarchar(100)
       declare @SQLStr nvarchar(2000)
       declare @SQLStr1 nvarchar(2000)
       declare @SQLStr2 nvarchar(2000)
       --declare @number int
       declare @mainnumber int
       declare @intErrorCode int=0
       declare @intError_S1 int
       --declare @intError_S2 int
       --declare @intError_S3 int
       declare @Status int=0
       SET XACT_ABORT ON
    BEGIN TRAN
       --审批之前查看子表旅客人数
       --select @number=count(*) from VIEW_RENWOYOU_ESIGNATURE where ectsysid=@keyval
       --修改申请电子合同的审批字段
        --modify by zgd 20141104
        BEGIN
            set @CONTRACTNOTYPE='CONTRACTNOTYPE'
            set @SQLStr=N'select '+@CONTRACTNOTYPE+' from '+@TableName+' where SYSID='''+@keyval+''' '
            Exec sp_executesql @SQLStr
            --select @CONTRACTNOTYPE=CONTRACTNOTYPE,@mainnumber=TOURISTNO from @TableName where SYSID=@keyval
            if @CONTRACTNOTYPE='0' --and @mainnumber=@number
            BEGIN  
                --set @CHECKSTATETIMES='CHECKSTATETIMES'  set @CHECKUSERID='CHECKUSERID'  set @CHECKUSERNAME='CHECKUSERNAME'
                --set @APPROVALREASON='APPROVALREASON'  set @ApprovalResultFieldVal='ApprovalResultFieldVal'
                set @SQLStr1='update ['+@TableName+'] SET CHECKSTATETIMES='+@CHECKSTATETIMES+',CHECKUSERID='+@CHECKUSERID+',CHECKUSERNAME='
                +@CHECKUSERNAME+',APPROVALRESULT='+@ApprovalResultFieldVal+',APPROVALREASON='+@APPROVALREASON+' where  SYSID='''+@keyval+''''
                Exec sp_executesql @SQLStr1
                set @intError_S1 = @@ERROR
             END
             else if @CONTRACTNOTYPE='1' --and @mainnumber=@number
             BEGIN
                SET @SQLStr2='UPDATE @TableName SET CHECKSTATETIMES=CONVERT(varchar(50), GETDATE(), 20),CHECKUSERID='+@CHECKUSERID+',CHECKUSERNAME='
                +@CHECKUSERNAME+',APPROVALRESULT='+@ApprovalResultFieldVal+',APPROVALREASON='+@APPROVALREASON+',STAMPTIME=CONVERT(varchar(50), GETDATE(), 20),STAMPRENID='
                +@CHECKUSERID+',STAMPREN='+@CHECKUSERNAME+' where SYSID='''+@keyval+''''
                 Exec sp_executesql @SQLStr2
                 set @intError_S1 = @@ERROR
             END
        END
       
    SET @intErrorCode = @intError_S1
        IF @intErrorCode = 0
    BEGIN
    SET @Status = 1
    COMMIT TRAN
    END
    ELSE
    ROLLBACK TRAN
        select @Status as ExcuteStatus
    RETURN