以下自定义函数在语法检查时有下述错误。请教问题到底出在哪里?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认为可能与环境有关,无果。再发,求高手出手!
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认为可能与环境有关,无果。再发,求高手出手!
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??? 我调试没问题。
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
select dbo.ISOweek(getdate())-----------
4(1 行受影响)
另外,自己定义一个最简单的没内容的函数,看是否有问题.
还有,create 语句一般都应该是批的第一句,不知你是否注意到这点.