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