通常は 1 つの値を返す関数があります。ただし、返される行が複数ある場合は、すべての値のカンマ区切りの文字列を返します。私は関数の使用に慣れていないので、これがどのように行われるのだろうか? ループしていますか?SELECT ステートメントは 1 回しか実行されませんか? これが私のコードです:
CREATE FUNCTION dbo.list_of_cities (@fruit VARCHAR(10))
RETURNS VARCHAR(1000)
AS
BEGIN
DECLARE @output VARCHAR(1000)
SELECT @output = ISNULL(@output + ', ', '') + stores_table.city
FROM fruits_table INNER JOIN stores_table
ON fruits_table.store = stores_table.store
WHERE fruit = @fruit
RETURN @output
END
基本的に、この関数は、果物が販売されているすべての都市のリストを返すようにしたいと考えています。fruits_table には、果物と店舗の 2 つの列があります。store_table には、store と city の 2 つの列があります。ほとんどの場合、これは 1 つの都市のみを返しますが、果物が複数の店舗で販売されている場合があるため、複数の行が返されます。この関数は行をカンマ区切りの文字列に連結していますか? 関数は正常に動作しますが、なぜ/どのようにこれを行っているのか興味があります。