오류를 만드는 UDF 에서 SQL Server2005
-
02-07-2019 - |
문제
나를 만들려고 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
내가 좋아하는 이 대답으로,하지만 이후 나는 한 사람이 질문을하고,나는 확실하지 않다 이것은 적절한가?어떤 방법이 있나요?게 느끼십시오 느끼다.
제휴하지 않습니다 StackOverflow