В начале этой недели я сделал следующую функцию в SQL Server 2008, которая принимает два параметра и использует их для выбора столбца «подробных» записей и возвращает их в виде единого списка значений, разделенных запятыми. Теперь, когда я подумаю об этом, я хотел бы взять эту таблицу и специфичную для приложения функцию и сделать ее более общей.
Я не очень разбираюсь в определении функций SQL, так как это мой первый шаг. Как я могу изменить эту функцию, чтобы она принимала данные из одного столбца, чтобы я мог использовать ее более общим способом?
Вместо звонка:
SELECT ejc_concatFormDetails(formuid, categoryName)
Я бы хотел заставить его работать так:
SELECT concatColumnValues(SELECT someColumn FROM SomeTable)
Вот мое определение функции:
FUNCTION [DNet].[ejc_concatFormDetails](@formuid AS int, @category as VARCHAR(75))
RETURNS VARCHAR(1000) AS
BEGIN
DECLARE @returnData VARCHAR(1000)
DECLARE @currentData VARCHAR(75)
DECLARE dataCursor CURSOR FAST_FORWARD FOR
SELECT data FROM DNet.ejc_FormDetails WHERE formuid = @formuid AND category = @category
SET @returnData = ''
OPEN dataCursor
FETCH NEXT FROM dataCursor INTO @currentData
WHILE (@@FETCH_STATUS = 0)
BEGIN
SET @returnData = @returnData + ', ' + @currentData
FETCH NEXT FROM dataCursor INTO @currentData
END
CLOSE dataCursor
DEALLOCATE dataCursor
RETURN SUBSTRING(@returnData,3,1000)
END
Как видите, я выбираю данные столбца в своей функции, а затем перебираю результаты с помощью курсора, чтобы построить мой разделенный запятыми varchar.
Как я могу изменить это, чтобы принять один параметр, который является набором результатов, а затем получить доступ к этому набору результатов с помощью курсора?