我正在尝试在SQL Server 2005 Express
中创建一个UDF,如下所示:
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)
当我尝试按上述方法创建函数时,出现错误:
消息102,级别15,状态1,过程CombineValues,第10行不正确 '='附近的语法。
我做错了什么?
答案 0 :(得分:1)
使用此方法时需要小心。对于此查询,这可能不会影响您,但请记住此方法的未来应用。
如果列表中包含NULL值,则会出现此问题。发生这种情况时,您将得到不正确的结果。
例如,如果您的原始表格看起来像这样......
1 Blah
2 NULL
3 Foo
4 Cracker
你的功能将返回Foo,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,您将消除这个潜在的问题。
答案 1 :(得分:0)
尝试将SELECT更改为SET,然后通过SELECT(ing)@CuisineList
结束您的功能答案 2 :(得分: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
我想将此标记为答案,但由于我是提出这个问题的人,我不确定这是否合适?有什么建议?请发表意见。
答案 3 :(得分: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