2008-09-21 116 views
0

我想在SQL Server 2005 Express如下創建UDF創建UDF:錯誤在SQL Server 2005

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) 

當我嘗試創建功能以上,我得到一個錯誤:

Msg 102, Level 15, State 1, Procedure CombineValues, Line 10 Incorrect syntax near '='.

我在做什麼錯?

回答

0

這個答案來自原始海報Wild Thing。請不要對它投票。

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 
0

嘗試改變選擇要設置,然後選擇結束你的函數(荷蘭國際集團)的@CuisineList

0

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 

我想以此作爲答案,但由於我是問這個問題的人,我不確定這是否合適?有什麼建議麼?請感覺評論。

+0

你的回答是正確的。標記爲正確有助於社區找到正確的答案。 – 2008-09-21 17:44:26

1

使用此方法時需要小心。這個查詢現在可能不會影響你,但請記住這個方法的未來應用。

當列表中有一個NULL值時,就會出現該問題。發生這種情況時,您將得到不正確的結果。

例如,如果您的原始表看起來像這樣...

1 Blah 
2 NULL 
3 Foo 
4 Cracker 

你的函數將返回美孚,餅乾。這個函數調用會忽略第一個值Blah。這是很容易適應這種情況,有輕微的改動,你的功能,像這樣...

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,你會消除這個潛在的問題。