函数不可以用exec这是sqlserver的约束

解决方案 »

  1.   

    create proc fcMCGroundFactorIndex
     AS  
    BEGIN 
      declare @sql varchar(8000)
      set @sql = 'select viewMCExampleFactor.iFactorClassSn,viewMCGroundFactorDescribe.iIndex [主单]'
      select @sql = @sql + ',sum(case sExampleNo when '''+ cast(sExampleNo as varchar(10))+''' then isnull(viewMCExampleFactor.iIndex,0) else 0 end) ['+ '案例'+cast(sAliasName as varchar(10))+']'
      from (select distinct sExampleNo,sAliasName from viewMCExampleFactor) as a
      exec(@sql)
    END
      

  2.   

    1、
    不要懒varchar后加长度2、
    @sql是有长度限制的,不要加多余的空格、回车create proc fcMCGroundFactorIndex
     AS  
    BEGIN 
      declare @sql varchar(8000)
      set @sql = ''
      select @sql = @sql + ',sum(case sExampleNo when '''+ cast(sExampleNo as varchar(10))+''' then isnull(viewMCExampleFactor.iIndex,0) else 0 end) ['+ '案例'+cast(sAliasName as varchar(10))+']'
      from (select distinct sExampleNo,sAliasName from viewMCExampleFactor) as a
      exec('select viewMCExampleFactor.iFactorClassSn,viewMCGroundFactorDescribe.iIndex [主单] '+@sql+' from 你的表')
    END
      

  3.   

    pengdali(大力 V3.0),我现在用函数返回表的形式来返回上面的记录集该如何实现!因为我的iFactorClassSn还有对应的关联表,我要将对应的关联表数据也要读到该记录集中来!
      

  4.   

    pengdali(大力 V3.0),谢谢你的提点,我用函数能实现返回上面的记录集吗?
      

  5.   

    函数中不能用动态SQL语句,
    非确定性函数@@ERROR 
    FORMATMESSAGE 
    NEWID 
    IDENTITY 
    GETANSINULL 
    PATINDEX 
    @@ROWCOUNT 
    GETDATE 
    PERMISSIONS 
    @@TRANCOUNT 
    GetUTCDate 
    SESSION_USER 
    APP_NAME 
    HOST_ID 
    STATS_DATE 
    CHARINDEX 
    HOST_NAME 
    SYSTEM_USER 
    CURRENT_TIMESTAMP 
    IDENT_INCR 
    TEXTPTR 
    CURRENT_USER 
    IDENT_SEED 
    TEXTVALID 
    DATENAME 
    IDENTITY 
    USER_NAME 
    以上这些函数都不能在自定义函数中使用
      

  6.   

    函数不可以动态运行SQL语句你改为过程把EXEC(@SQL)
    或者
    declare @sql nvarchar(4000)
    execute sp_executesql @sql
      

  7.   

    create proc fcMCGroundFactorIndex
     AS  
    BEGIN 
      declare @sql varchar(8000)
      set @sql = ''
      select @sql = @sql + ',sum(case sExampleNo when '''+ cast(sExampleNo as varchar(10))+''' then isnull(viewMCExampleFactor.iIndex,0) else 0 end) ['+ '案例'+cast(sAliasName as varchar(10))+']'
      from (select distinct sExampleNo,sAliasName from viewMCExampleFactor) as a
      exec('select viewMCExampleFactor.iFactorClassSn,viewMCGroundFactorDescribe.iIndex [主单] '+@sql+' into ##全局临时表 from 你的表')
    END
    go......