create FUNCTION [dbo].[getTProduct] (@hxetorderid varchar(50))  
RETURNS varchar(50) AS  
BEGIN    declare @product varchar(50),@hLen int
   set @hxetorderid=ltrim(rtrim(@hxetorderid))
   set @hLen=len(@hxetorderid)-3
   if isnumeric(right(@hxetorderid,3))=0
     set @product=@hxetorderid
  else
    set @product=substring(@hxetorderid,1,@hLen)   return @product
END将这个函数作为某个表计算列的公式时,总是验证失败,不知是什么原因

解决方案 »

  1.   

    CREATE TABLE TB(NAME VARCHAR(20),NEWNAME AS DBO.[getTProduct](NAME))?
      

  2.   

    create FUNCTION [dbo].[getTProduct] (@hxetorderid varchar(50))  
    RETURNS varchar(50) AS  
    BEGIN    declare @product varchar(50),@hLen int
       set @hxetorderid=ltrim(rtrim(@hxetorderid))
       set @hLen=len(@hxetorderid)-3
       if isnumeric(right(@hxetorderid,3))=0
         set @product=@hxetorderid
      else
        set @product=substring(@hxetorderid,1,@hLen)   return @product
    END
    SELECT [dbo].[getTProduct]('0.1245')--DROP TABLE TB
    CREATE TABLE TB(NAME VARCHAR(20),NEWNAME AS DBO.[getTProduct](NAME))INSERT TB SELECT '1245'SELECT * FROM TBNAME                 NEWNAME                                            
    -------------------- -------------------------------------------------- 
    1245                 1(所影响的行数为 1 行)晕,我都能行啊
      

  3.   

    是不是忘了写"dbo."喽?
    公式看上去是没什么问题...
      

  4.   

    不是,dbo什么的都有写
    这个函数设为函数列时会验证出现错误CREATE FUNCTION [dbo].[getProduct1] (@hxetorderid varchar(50))  
    RETURNS varchar(50) AS  
    BEGIN    declare @product varchar(50)
       if isnumeric(right(@hxetorderid,3))=0
         set @product=@hxetorderid
      else
        set @product=substring(@hxetorderid,1,len(@hxetorderid)-3)   return @product
    END这样就不会:CREATE FUNCTION [dbo].[getProduct] (@hxetorderid varchar(50))  
    RETURNS varchar(50) AS  
    BEGIN    declare @product varchar(50)
       if isnumeric(right(@hxetorderid,3))=0
         set @product=@hxetorderid
      else
        set @product=substring(@hxetorderid,1,len(@hxetorderid)-charindex('T',reverse(ltrim(rtrim(@hxetorderid))),1)+1)   return @product
    END