以下自定义函数在语法检查时有下述错误。请教问题到底出在哪里?CREATE FUNCTION F_INCom(@code char(16))   
RETURNS varchar(1000) AS   
BEGIN
  declare @_tempstr varchar(1000)  
  set @_tempstr = ''  
  select @_tempstr = @_tempstr + ',' + rtrim(T_bjyt.itemno)
  from T_bjyt where T_bjyt.scode = @code  
  select @_tempstr = case
  when @_tempstr <> '' then
  left( @_tempstr, len(@_tempstr) - 1)
  else
  null
  end  
  return (@_tempstr)  
END错误提示
服务器: 消息 170,级别 15,状态 1,行 1
第 1 行: 'FUNCTION' 附近有语法错误。
服务器: 消息 137,级别 15,状态 1,行 8
必须声明变量 '@code'。
服务器: 消息 178,级别 15,状态 1,行 16
在此上下文中不能使用带有返回值的 RETURN 语句。我把SQL SERVER联机丛书中的示例在查询分析器测试,出现以下结果:CREATE FUNCTION ISOweek (@DATE datetime)
RETURNS int
AS
BEGIN
  DECLARE @ISOweek int
  SET @ISOweek= DATEPART(wk,@DATE)+1
  -DATEPART(wk,CAST(DATEPART(yy,@DATE) as CHAR(4))+'0104')
--Special cases: Jan 1-3 may belong to the previous year
  IF (@ISOweek=0)  
  SET @ISOweek=dbo.ISOweek(CAST(DATEPART(yy,@DATE)-1  
  AS CHAR(4))+'12'+ CAST(24+DATEPART(DAY,@DATE) AS CHAR(2)))+1
--Special case: Dec 29-31 may belong to the next year
  IF ((DATEPART(mm,@DATE)=12) AND  
  ((DATEPART(dd,@DATE)-DATEPART(dw,@DATE))>= 28))
  SET @ISOweek=1
  RETURN(@ISOweek)
END
服务器: 消息 170,级别 15,状态 1,行 1
第 1 行: 'FUNCTION' 附近有语法错误。
服务器: 消息 137,级别 15,状态 1,行 6
必须声明变量 '@DATE'。
服务器: 消息 137,级别 15,状态 1,行 10
必须声明变量 '@DATE'。
服务器: 消息 137,级别 15,状态 1,行 13
必须声明变量 '@DATE'。
服务器: 消息 178,级别 15,状态 1,行 17
在此上下文中不能使用带有返回值的 RETURN 语句。我真不知道问题出在哪里了!求高手赐教注:在基础类发过此贴,但问题没解决。有TX认为可能与环境有关,无果。再发,求高手出手!

解决方案 »

  1.   


    CREATE FUNCTION F_INCom(@code char(16))   
    RETURNS varchar(1000) AS   
    BEGIN
      declare @_tempstr varchar(1000)   
      set @_tempstr = ''   
      select @_tempstr = @_tempstr + ',' + rtrim(T_bjyt.itemno)
      from T_bjyt where T_bjyt.scode = @code   
      select @_tempstr = case
      when @_tempstr <> '' then
      left( @_tempstr, len(@_tempstr) - 1)
      else
      null
      end   
    return (@_tempstr)   
    END
    go???  我调试没问题。
      

  2.   

    只能说明你这里面或许有其他占位符、全角空格符之类的CREATE FUNCTION ISOweek (@DATE datetime)
    RETURNS int
    AS
    BEGIN
      DECLARE @ISOweek int
      SET @ISOweek= DATEPART(wk,@DATE)+1
      -DATEPART(wk,CAST(DATEPART(yy,@DATE) as CHAR(4))+'0104')
    --Special cases: Jan 1-3 may belong to the previous year
      IF (@ISOweek=0)  
      SET @ISOweek=dbo.ISOweek(CAST(DATEPART(yy,@DATE)-1  
      AS CHAR(4))+'12'+ CAST(24+DATEPART(DAY,@DATE) AS CHAR(2)))+1
    --Special case: Dec 29-31 may belong to the next year
      IF ((DATEPART(mm,@DATE)=12) AND  
      ((DATEPART(dd,@DATE)-DATEPART(dw,@DATE))>= 28))
      SET @ISOweek=1
      RETURN(@ISOweek)
    END
      

  3.   

    没问题啊,ISOweek 在我这里都可以用。
    select dbo.ISOweek(getdate())-----------
    4(1 行受影响)
      

  4.   

    是不是你的MSSQL安装得有问题啊?建议重装一下试试.
    另外,自己定义一个最简单的没内容的函数,看是否有问题.
    还有,create 语句一般都应该是批的第一句,不知你是否注意到这点.