如何解决如何在SQL Server 2005中的函数中声明表
| 我需要创建一个函数,对要返回到SQL视图的数据进行某些处理。 我已经设计了如下功能,但出现错误提示 必须声明表变量 \“ @ FINALRESULTS \” 尽管我已将其定义为表格。 您能帮我使该功能可执行吗? 感谢您的帮助!!CREATE FUNCTION dbo.names(@CUSTID varchar(20),@effdt varchar(20))
RETURNS @FinalResults1 (Name1 nvarchar(254),Name2 nvarchar(254))
AS
BEGIN
DECLARE TABLE @FinalResults (Name254 nvarchar(254),SRNO nvarchar(3))
CREATE TABLE @FinalResults (Name254 nvarchar(254),SRNO nvarchar(3))
INSERT INTO @FinalResults
SELECT(C.NAME1),ROW_NUMBER() OVER(ORDER BY A.SEQ_NBR)
FROM PS_ARB_CU_CLST_STN A,PS_ARB_CU_STATIONS C
WHERE A.EFF_STATUS = \'A\'
AND A.EFFDT = (SELECT MAX(B.EFFDT)
FROM PS_ARB_CU_CLST_STN B
WHERE A.SETID = B.SETID
AND A.CUST_ID = B.CUST_ID
AND B.EFFDT <= @effdt)
AND A.SETID = C.SETID
AND A.ARB_STATION_ID =C.CUST_ID
AND A.CUST_ID = @CUSTID
AND C.EFFDT = (SELECT MAX(D.EFFDT)
FROM PS_ARB_CU_STATIONS D
WHERE C.CUST_ID = D.CUST_ID
AND D.SETID = C.SETID
AND D.EFFDT <= @effdt)
ORDER BY
A.SEQ_NBR
DECLARE @Name nvarchar(254),@FULLNAME1 nvarchar(128),@FREEZENAME1 nvarchar(10),@append NVARCHAR (254)
DECLARE @FULLNAME254 nvarchar(254),@FULLNAME2 nvarchar(128),@FREEZENAME2 nvarchar(10),@COUNT INT,@i INT
SET @Name = \'\'
SET @FREEZENAME1 = \'FALSE\'
SET @FREEZENAME2 = \'FALSE\'
SET @FULLNAME1 = \'\'
SET @FULLNAME2 = \'\'
SET @FULLNAME254 = \'\'
SET @COUNT = 0
SET @i = 0
SELECT @COUNT = COUNT(*) FROM @FinalResults
WHILE @i < @COUNT
BEGIN
IF @FULLNAME1 = \'\'
IF(LEN((SELECT NAME254 FROM @FinalResults WHERE SRNO = @i )+ \'/\')<= 40 AND @FREEZENAME1 = \'FALSE\' )
SET @FULLNAME1 = (SELECT NAME254 FROM @FinalResults WHERE SRNO = @i + \'/\');
ELSE
SET @FREEZENAME1 = \'TRUE\';
END IF
ELSE
IF (LEN(@FULLNAME1 +(SELECT NAME254 FROM @FinalResults WHERE SRNO = @i )+ \'/\') <=40 AND @FREEZENAME1 = \'FALSE\' )
SET @FULLNAME1 = (@FULLNAME1 +(SELECT NAME254 FROM @FinalResults WHERE SRNO = @i )+ \'/\') ;
ELSE
SET @FREEZENAME1 = \'TRUE\';
IF @FULLNAME2 = \'\'
IF (LEN((SELECT NAME254 FROM @FinalResults WHERE SRNO = @i )+ \'/\')<= 40 AND @FREEZENAME2 = \'FALSE\' )
SET @FULLNAME2 = ((SELECT NAME254 FROM @FinalResults WHERE SRNO = @i )+ \'/\') ;
ELSE
SET @FREEZENAME2 = \'TRUE\';
END IF
ELSE
IF (LEN(@FULLNAME2 +(SELECT NAME254 FROM @FinalResults WHERE SRNO = @i )+ \'/\') <=40 AND @FREEZENAME2 = \'FALSE\')
SET @FULLNAME2 = (@FULLNAME2 +(SELECT NAME254 FROM @FinalResults WHERE SRNO = @i )+ \'/\') ;
ELSE
SET @FREEZENAME2 = \'TRUE\';
END-IF
END-IF
END-IF
END-IF
IF @append = \'\'
@append = (SELECT NAME254 FROM @FinalResults WHERE SRNO = @i );
Else
@append = @append + \'/\'+ (SELECT NAME254 FROM @FinalResults WHERE SRNO = @i );
END-IF
END-IF
SET @i = @i +1
END
END-WHILE
If (Len(@append) < 40)
@FULLNAME1 = RTrim(@FULLNAME2,\'/\');
End-If;
If ((Len(@append) > 40) And
(Len(@append) < 80))
@FULLNAME2 = RTrim(@FULLNAME2,\'/\');
End-If;
BEGIN
INSERT INTO #FinalResults1 VALUES ( @FULLNAME1,@FULLNAME2)
END
RETURN
END
GO
SELECT Name1,Name2
FROM @FinalResults1
解决方法
DECLARE TABLE @FinalResults (Name254 nvarchar(254),SRNO nvarchar(3))
CREATE TABLE @FinalResults (Name254 nvarchar(254),SRNO nvarchar(3))
应该只是
DECLARE @FinalResults TABLE (Name254 nvarchar(254),SRNO nvarchar(3))
此外,函数的返回类型应为
RETURNS @FinalResults1 TABLE (Name1 nvarchar(254),Name2 nvarchar(254))
似乎还有更多的语法错误(为什么要使用END-IF
?),但这应该可以回答所问的问题,我无意全部修复它们。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。