为变量分配不同的记录

时间:2011-05-25 06:43:02

标签: sql sql-server tsql sql-server-2000 user-defined-functions

我创建了一个Table-Valued函数来返回逗号分隔列表,但是列表中的问题只包含不同的值。我的功能如下:

CREATE FUNCTION [dbo].[clientContactsConcat] ( @clnum INT )
RETURNS NVARCHAR(4000)
AS BEGIN
    DECLARE @concat NVARCHAR(4000)
    SELECT @concat =COALESCE(@concat, ' ') + clcontact + ', '
    FROM    dbo.client
    WHERE crelated = @clnum
    AND NOT clcontact IS NULL
    SELECT  @concat = SUBSTRING(@concat, 2, LEN(@concat) - 2)
    RETURN ( @concat )
END

这将列出所有值,当我将SELECT修改为SELECT DISTINCT @concat =COALESCE(@concat, ' ') + clcontact + ', '...时,它将仅返回select返回的第一个结果。

在与COALESCE一起分配变量时,有没有办法只返回不同的记录?

以下记录:

clcontact
---------------------
Mr S Smith
Mrs R Jones
Ms L Morrison
Mrs R Jones

我希望返回以下内容:Mr S Smith, Mrs R Jones, Ms L Morrison

1 个答案:

答案 0 :(得分:2)

您可以尝试将SELECT DISTINCT放入派生表中。

 SELECT @concat =COALESCE(@concat, ' ') +  clcontact
 FROM
 (

    SELECT DISTINCT  clcontact + ', ' AS clcontact
    FROM    dbo.client
    WHERE crelated = @clnum
    AND NOT clcontact IS NULL
  ) T

请注意这种连接字符串is not guaranteed to work的方法,但我不确定SQL Server 2000中有哪种明显更好的方法。