在SQL Server 2005中创建UDF时出错
时间:2020-03-06 14:30:39 来源:igfitidea点击:
我正在尝试在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)
当我尝试如上所述创建函数时,出现错误:
Msg 102, Level 15, State 1, Procedure CombineValues, Line 10 Incorrect syntax near '='.
我究竟做错了什么?
解决方案
尝试将SELECT更改为SET,然后通过SELECT(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
我想将此标记为答案,但是由于我是问这个问题的人,所以我不确定这是否合适?有什么建议?请感到有评论的感觉。
答案来自原始海报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
使用此方法时需要小心。对于此查询,这现在可能不会影响我们,但请记住此方法的将来应用。
当我们在列表中有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,我们将消除此潜在问题。