当前位置: 代码迷 >> Sql Server >> 存储过程 哪儿出错
  详细解决方案

存储过程 哪儿出错

热度:48   发布时间:2016-04-24 09:45:12.0
存储过程 哪里出错?
ALTER PROCEDURE [dbo].[sp_rwy_SealContractApprovel] 
(
    @TableName nvarchar(100), --表名称
    @keyval nvarchar(50), --表主键     
    @ApprovalResultFieldVal nvarchar(50), --字典类型,值为0、1、2
    @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 @mainnumber int
   declare @intErrorCode int=0
   declare @intError_S1 int
   declare @Status int=0
   SET XACT_ABORT ON
BEGIN TRAN
    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'
        BEGIN  
            set @SQLStr1='update ['+@TableName+'] SET CHECKSTATETIMES=CONVERT(varchar(50), GETDATE(), 20),CHECKUSERID='
            +@CHECKUSERID+',CHECKUSERNAME='+@CHECKUSERNAME+',APPROVALRESULT='+@ApprovalResultFieldVal+',APPROVALREASON='+@APPROVALREASON+'where  SYSID='+@keyval
            Exec(@SQLStr1)
            set @intError_S1 = @@ERROR
         END
         else if @CONTRACTNOTYPE='1' 
         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(@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 
------解决思路----------------------
set @SQLStr=N'select '+@CONTRACTNOTYPE+' from '+@TableName+' where SYSID='''+@keyval+''' '
是这样~~
  相关解决方案