HI内通过变量值,无法功能
我试图在SQL Server 2005创建以下功能Howver它给人异常,当我试图在RTRIM进行@FULLNAME2 & @FULLNAME1
值。异常请求Rtrim的参数,但它已经通过了。 请注意我已经能够创建这个功能,不包括Rtrim部分。
另一个问题是我需要在视图中调用此函数,我打电话给它使用select names ('val1','val2')
。它指出这不是一个公认的功能。不过,我可以在类型为'TF'的sysobjects表中看到这个函数。
请建议。
CREATE FUNCTION dbo.names(@CUSTID varchar(20),@effdt varchar(20))
RETURNS @FinalResults1 TABLE (Name1 nvarchar(254), Name2 nvarchar(254))
AS
BEGIN
DECLARE @FinalResults TABLE (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
SET @append = ''
SELECT @COUNT = COUNT(*) FROM @FinalResults
WHILE @i < @COUNT
BEGIN
IF @FULLNAME1 = ''
BEGIN
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
ELSE
BEGIN
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
BEGIN
SET @FREEZENAME1 = 'TRUE';
IF @FULLNAME2 = ''
BEGIN
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
ELSE
BEGIN
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
END
END
END
IF @append = ''
SET @append = (SELECT NAME254 FROM @FinalResults WHERE SRNO = @i);
Else
SET @append = @append + '/'+ (SELECT NAME254 FROM @FinalResults WHERE SRNO = @i);
SET @i = @i +1
If (Len(@append) < 40)
SET @FULLNAME1 = RTrim(@FULLNAME1, '/');
End
If ((Len(@append) > 40) And
(Len(@append) < 80))
SET @FULLNAME2 = RTrim(@FULLNAME2, '/');
End
INSERT INTO @FinalResults1 VALUES (@FULLNAME1, @FULLNAME2)
RETURN
END
您好,感谢您的答复。我做了necesarry更改,并可以创建该功能。但是当我调用函数时,它给了我空白值。我认为这是因为我正在通过。我已经将effdt定义为日期时间,并且我的查询获取的数据为'2011-04-21 00:00:00.000'。如何解决这个问题? – Dhiraj 2011-05-25 13:27:22
是否将@effdt varchar(20)更改为@effdt datetime? – 2011-05-25 13:43:46
是的,我改变它datetime,而且我注意到,长度= LEN((SELECT NAME254 FROM @FinalResults WHERE SRNO = @i)返回正确的值说7,但是当我检查lenght = LEN((SELECT NAME254 FROM @FinalResults WHERE SRNO = @)+'/')它的给予41 ..didnt得到为什么这是如此?? – Dhiraj 2011-05-25 15:43:00