Возможно ли это? Если нет, каковы другие варианты?
Одна из вещей, которые я пытался сделать до сих пор, - это (не работает; я также знаю, что в случае, если значение первого аргумента равно <0 или> 4 Я пытаюсь вернуть неинициализированную переменную, но это примерно то, что я хотел бы получить: Я бы предпочел гораздо больше, чтобы получить столик):
SET NOCOUNT ON;
USE AdventureWorks2008;
GO
IF OBJECT_ID('dbo.fn_ConcatPeopleData') IS NOT NULL
DROP FUNCTION dbo.fn_ConcatPeopleData;
GO
CREATE FUNCTION dbo.fn_ConcatPeopleData
(@bid AS NCHAR(5), @columns AS INT ) RETURNS NCHAR(1000)
AS
BEGIN
DECLARE @data AS VARCHAR(8000);
SET @data = '';
IF (@columns = 1)
SELECT @data = @data + CAST(LastName AS VARCHAR(100))
FROM Person.Person AS P
WHERE P.BusinessEntityID = @bid;
ELSE IF (@columns = 2)
SELECT @data = @data + CAST(LastName AS VARCHAR(100))+' ' + CAST(FirstName AS VARCHAR(100))
FROM Person.Person AS P
WHERE P.BusinessEntityID = @bid;
ELSE IF (@columns = 3)
SELECT @data = @data + CAST(LastName AS VARCHAR(100))+' ' + CAST(FirstName AS VARCHAR(100))+', ' +
CAST(E.EmailAddress AS VARCHAR(100))
FROM Person.Person AS P
INNER JOIN Person. EmailAddress AS E ON P.BusinessEntityID = E.BusinessEntityID
WHERE P.BusinessEntityID = @bid;
ELSE IF (@columns = 4)
SELECT @data = @data + CAST(LastName AS VARCHAR(100))+' ' + CAST(FirstName AS VARCHAR(100))+', ' +
CAST(E.EmailAddress AS VARCHAR(100))+', ' + CAST(A.AddressLine1 AS VARCHAR(100))+' ' +
CAST(A.City AS VARCHAR(100))+' ' + CAST(A.PostalCode AS VARCHAR(100))
FROM Person.Person AS P
INNER JOIN Person.EmailAddress AS E ON P.BusinessEntityID = E.BusinessEntityID
INNER JOIN Person.BusinessEntityAddress AS BA ON P.BusinessEntityID = BA.BusinessEntityID
INNER JOIN Person.Address AS A ON BA.AddressID = A.AddressID
WHERE P.BusinessEntityID = @bid;
RETURN @data;
END
SELECT BusinessEntityID, dbo.fn_ConcatPeopleData(BusinessEntityID, 3) AS [Person Info]
FROM Person.Person;