需求这样的:我要格式化小数位的位数,但位数是动态的,我就自定义了个函数
create function [dbo].[getXSWS] (@CSBM varchar(20))
returns int
as
begin
  declare @xsws smallint
  set @xsws=0
 --取出小数点后面有几位 也就是 位数(动态的)
  select @xsws=(len(csz)-charindex('.',csz)) from JC_XTCS where csbm=@CSBM
  return @xsws
endselect convert(decimal(38,dbo.getXSWS('cw001')),SE) from V_CGFPMX服务器: 消息 170,级别 15,状态 1,行 1
第 1 行: 'dbo' 附近有语法错误。
是不是因为系统函数内不能用自定义函数的原因?该怎么解决 ??

解决方案 »

  1.   

    试试
    declare @i int
    select @i=dbo.getXSWS('cw001'))
    select convert(decimal(38,@i),SE) from V_CGFPMX
      

  2.   

    不成
    declare @i int
    set @i=2
    select convert(decimal(12,@i),24)出错了:)
      

  3.   

    convert的语法错了吧。
    select dbo.getXSWS('cw001') 
    你先试试这个
    再试
    select decimal(38,dbo.getXSWS('cw001')) from V_CGFPMX
      

  4.   

    declare @i int,@s varchar(200)
    set @i=2
    --select convert(decimal(12,@i),24)
    set @s='select cast (24 as decimal(12,'+cast(@i as varchar(5))+'))'
    exec (@s)
      

  5.   

    是decimal里的变量问题:)试试上例就成
      

  6.   

    declare @i int
    select @i=dbo.getXSWS('cw001'))exec('select convert(decimal(38,'+@i+'),SE) from V_CGFPMX')
      

  7.   

    declare @i int
    declare @tab varchar(100)set @i=dbo.getXSWS('cw001'))
    set @tab = '你的表名'
    exec('select convert(decimal(38,'+@i+'),SE) from '+@tab)  --把你的表名也变成动态的就可以了
      

  8.   

    我要实现个
    SELECT getXSWS('cw001','tablename','CGSL') CGSL,getXSWS('cw001','tablename','CWSL') CWSL FROM V_CGFP A,V_CGFPMX B
    WHERE A.ID=B.CGFPID 
    这样出来的CGSL,CWSL 小数点后面为4位 
    select convert(decimal(38,小数位),列名) from 表名create function [dbo].[getXSWS] (@CSBM varchar(20),@BM varchar(20),@LM varchar(20))
    returns varchar(100)
    as
    begin
      declare @i smallint
      declare @tab varchar(20)
      declare @tit varchar(20)
      set @i=0
      set @tab=@BM
      SET @tit=@LM
      select @i=(len(csz)-charindex('.',csz)) from JC_XTCS where csbm=@CSBM
      exec('select convert(decimal(38,'+@i+'),@tit) from @tab')
    end
    服务器: 消息 443,级别 16,状态 2,过程 getXSWS,行 12
    在函数内不正确地使用了 'EXECUTE'。
    服务器: 消息 455,级别 16,状态 1,过程 getXSWS,行 12
    函数中最后一条语句必须是返回语句。
      

  9.   

    函数中不能使用动态SQL的,改用存储过程吧