CREATE function Fun_GetUserID(@TableName varchar(30),@FieldUser varchar(30),@FieldDocNo varchar(30),@DocNo int)
returns varchar(300)
as
begin
    declare @SqlText varchar(8000)
    select @SqlText ='select  isnull('+@FieldUser+','' '') from '+@TableName +' where '+@FieldDocNo+'='+str(@DocNo)    return  @SqlText
end-----------------------------------
上面是我写的自定义函数 select dbo.Fun_GetUserID('Ass_Work_WorkPlan','CreatID','SysID','1')
==================================
这是我的调用自定义函数返回结果:select  isnull(CreatID,' ') from Ass_Work_WorkPlan where SysID=1=============================
当这不是我要的结果,其实我想访问的是:select  isnull(CreatID,' ') from Ass_Work_WorkPlan where SysID=1的查询值:104

解决方案 »

  1.   

    函数不支持执行动态SQL,改为存储过程写.
      

  2.   

    CREATE proc Fun_GetUserID(@TableName varchar(30),@FieldUser varchar(30),@FieldDocNo varchar(30),@DocNo int)
    as
    begin
        declare @SqlText varchar(8000)
        select @SqlText ='select  isnull('+@FieldUser+','' '') from '+@TableName +' where '+@FieldDocNo+'='+str(@DocNo)    exec(@SqlText)
    end
      

  3.   

    CREATE procedure protest
    @TableName varchar(30),
    @FieldUser varchar(30),
    @FieldDocNo varchar(30),
    @DocNo int,
    @SqlText varchar(300) output
    as
        select @SqlText ='select  isnull('+@FieldUser+','' '') from '+@TableName +' where '+@FieldDocNo+'='+str(@DocNo)
      

  4.   

    沒辦法,用函數實現不了,只能用存儲過程了。CREATE Procedure Pro_GetUserID(@TableName varchar(30),@FieldUser varchar(30),@FieldDocNo varchar(30),@DocNo int)
    as
    begin
        declare @SqlText varchar(8000)
        select @SqlText ='select  isnull('+@FieldUser+','' '') from '+@TableName +' where '+@FieldDocNo+'='+str(@DocNo)    EXEC(@SqlText)
    end
    GO
      

  5.   

    動態語句在函數裡是沒辦法執行的。
    =================================写存储过程我知道啊,当不能: select Pro_GetUserID('Ass_Work_WorkPlan','CreatID','SysID','1')调用了
      

  6.   

    lzgctgc(燎原) ( ) 信誉:100    Blog  2007-04-02 09:21:48  得分: 0  
     
     
       動態語句在函數裡是沒辦法執行的。
    =================================写存储过程我知道啊,当不能: select Pro_GetUserID('Ass_Work_WorkPlan','CreatID','SysID','1')调用了  
     
    ------這麼執行EXEC Pro_GetUserID 'Ass_Work_WorkPlan','CreatID','SysID','1'
      

  7.   

    EXEC Pro_GetUserID 'Ass_Work_WorkPlan','CreatID','SysID','1')
    在另外一个存储过程中用到取Pro_getuserid的返回值:
      

  8.   

    select exec Wf_OperCreateID 'Ass_Work_WorkPlan','CreatID','SysID','1'
    =================================================
    也不可以啊
      

  9.   

    select exec Wf_OperCreateID 'Ass_Work_WorkPlan','CreatID','SysID','1'
    --去掉select
    exec Wf_OperCreateID 'Ass_Work_WorkPlan','CreatID','SysID','1'
      

  10.   

    select exec Wf_OperCreateID 'Ass_Work_WorkPlan','CreatID','SysID','1'
    --去掉select
    exec Wf_OperCreateID 'Ass_Work_WorkPlan','CreatID','SysID','1'
    =============================================
    那我怎么使用执行存储过程的返回值啊
      

  11.   

    我需要在另外一个存储过程中调用Wf_OperCreateID并且获取返回的值啊
      

  12.   

    lzgctgc(燎原) ( ) 信誉:100    Blog  2007-04-02 09:36:46  得分: 0  
     
     
       我需要在另外一个存储过程中调用Wf_OperCreateID并且获取返回的值啊
      
     -------------------建立存儲過程
    CREATE Procedure Pro_GetUserID(@TableName varchar(30),@FieldUser varchar(30),@FieldDocNo varchar(30),@DocNo int, @Value Varchar(100) Output)
    as
    begin
        declare @SqlText Nvarchar(4000)
        select @SqlText ='select  @Value = isnull('+@FieldUser+','' '') from '+@TableName +' where '+@FieldDocNo+'='+str(@DocNo)    EXEC sp_executesql @SqlText, N'@Value Varchar(100) Output', @Value Output
    end
    GO--調用
    Declare @Value Varchar(100)
    exec Wf_OperCreateID 'Ass_Work_WorkPlan','CreatID','SysID','1', @Value Output
    Select @Value