문제

나를 만들려고 UDF SQL Server 2005 Express 아래와 같:

CREATE FUNCTION [CombineValues] ()
RETURNS VARCHAR(8000)
AS
BEGIN

DECLARE @CuisineList VARCHAR(8000);

RETURN 
    (
    SELECT @CuisineList = COALESCE(@CuisineList + ', ', '') + 
        CAST(Cuisine AS varchar(20))
    FROM Cuisines
    )
END

요리 구조를 갖는:

CuisineID INT PK,
Cuisine VARCHAR(20)

을 만들려고 할 때 이 기능은 위와 같이,저는 오류를 얻을:

Msg102,15,상태 1 수준,절차 CombineValues,라인이 잘못된 10 구문 근처'='.

무엇이 잘못된 것입니까?

도움이 되었습니까?

해결책

이 대답은 원래 포스터,야생 것입니다.하지 마십시오 투표를 그것은 위 또는 아래로.

CREATE FUNCTION [CombineValues] ()
RETURNS VARCHAR(8000)
AS
BEGIN

DECLARE @CuisineList VARCHAR(8000);

SELECT @CuisineList = COALESCE(@CuisineList + ', ', '') + CAST(Cuisine AS varchar(20)) FROM Cuisines;

RETURN 
(
SELECT @CuisineList
)
END

다른 팁

당신은 신중해야 할 때 사용하는 이 방법입니다.이에 영향을 미치지 않을 수도 있습니다 당신은 지금,이에 대한 쿼리,하지만 이러한 점을 염두에 두시기 바랍에 대한 미래의 응용 프로그램의 이 방법입니다.

문제가 발생합이 있을 때는 NULL 값에서 당신의 목록입니다.이 경우,당신은 당신을 얻을 것이 잘못된 결과입니다.

는 경우,예를 들어,원본 테이블은 다음과 같습니다...

1   Blah
2   NULL
3   Foo
4   Cracker

귀하의 기능을 반환 Foo,크래커입니다.첫 번째 값,ㅋ,놓친 것입니다 이 함수 호출합니다.그것은 매우 쉽게 이를 적용하기 위해 약간의 변경과 당신의 기능과 같은 이...

CREATE FUNCTION [CombineValues] ()
RETURNS VARCHAR(8000)
AS
BEGIN

DECLARE @CuisineList VARCHAR(8000);
    SELECT @CuisineList = COALESCE(@CuisineList + ', ', '') + 
        CAST(Cuisine AS varchar(20))
    FROM Cuisines
    WHERE Cuisine Is Not NULL

RETURN @CuisineList
END

에 의해 테스트를 위한 NOT NULL,당신은 이런 문제를 방지하기 위해 잠재적인 문제입니다.

도 변경하는 선택을 설정한 다음 최종하기능 선택하여(ing)하@CuisineList

Hojou,당신의 제안은 작동하지 않았다,그러나 비슷한았다:

CREATE FUNCTION [CombineValues] ()
RETURNS VARCHAR(8000)
AS
BEGIN

DECLARE @CuisineList VARCHAR(8000);

SELECT @CuisineList = COALESCE(@CuisineList + ', ', '') + CAST(Cuisine AS varchar(20)) FROM Cuisines;

RETURN 
(
SELECT @CuisineList
)
END

내가 좋아하는 이 대답으로,하지만 이후 나는 한 사람이 질문을하고,나는 확실하지 않다 이것은 적절한가?어떤 방법이 있나요?게 느끼십시오 느끼다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top