Разделить один столбец на несколько столбцов, но данные будут отличаться от SQL

У меня есть набор строк в моей базе данных, которые выглядят так:

Mr Joe Bloggs
Joe Bloggs
Joe Jim Bloggs
Joe Jim David Bloggs
Mr Joe Jim Bloggs
Mr Joe Jim David Bloggs

Требуется вывод:

Title | First Name | Middle Name | Surname
------------------------------------------
Mr | Joe | x | Bloggs
x | Joe | x | Bloggs
x | Joe | Jim | Bloggs
x | Joe | Jim David | Bloggs
Mr | Joe | Jim | Bloggs
Mr | Joe | Jim David | Bloggs

Это будет выполнено в хранимой процедуре SQL. Что мне нужно, это выходные данные, генерируемые при циклическом просмотре CURSOR и 4 переменных, чтобы обновить 4 столбца в базе данных. Но, как вы можете видеть, данные в 1 столбце и варьируются.

Мне трудно понять, как лучше всего это сделать, и я хотел бы получить вашу помощь, пожалуйста. Позвольте мне знать, если вам нужно что-нибудь еще.

Подобные вопросы на мой, но я чувствую, что они не дают мне полный ответ, который мне нужен, или я думаю, что он не отвечает на мой вопрос:

Разделить строку столбца на несколько строк столбцовразделить выбранные результаты (один столбец) на несколько столбцовSQL один столбец разделен на несколько столбцовКак я могу разделить значение столбца на разные столбцы в SQLЗапрос SQL для разделения одного столбца на два столбцаСтолбец таблицы разделен на два столбца в sql?

РЕДАКТИРОВАТЬ:

    --Temporary Table to Merge the full name together in order to split by comma. Each split will have a unique record but with the same address information for each name. 
    CREATE TABLE #TempOutput
    (
        ClientReference varchar(MAX),
        Prefix varchar(MAX),
        Reference int,
        MergedFullName varchar(MAX),
        FormatName varchar(MAX),
        Title varchar(MAX),
        FirstName varchar(MAX),
        MiddleName varchar(MAX),
        Surname varchar(MAX)
    )

    DECLARE @Ref varchar(MAX)
    DECLARE @Prefix varchar(MAX)
    DECLARE @Reference int
    DECLARE @MergedName varchar(MAX)
    DECLARE @FormatName varchar(MAX)
    DECLARE @Title varchar(MAX)
    DECLARE @FirstName varchar(MAX)
    DECLARE @MiddleName varchar(MAX)
    DECLARE @Surname varchar(MAX)

    DECLARE ExtraNameSplitCursor CURSOR FOR
        SELECT 
            [Client Reference], 
            Prefix,
            Reference,
            CASE 
                WHEN LEFT(Surname,3) = 'Mr,' THEN (Title + ' ' + [First Name] + ' ' + [Middle Name] + ' ' + Replace(Surname,'Mr,',''))
                WHEN LEFT(Surname,4) = 'Mrs,' THEN (Title + ' ' + [First Name] + ' ' + [Middle Name] + ' ' + Replace(Surname,'Mrs,',''))
                ELSE (Title + ' ' + [First Name] + ' ' + [Middle Name] + ' ' + Surname) 
            END AS [Merged Full Name]
        FROM #StartResults

    OPEN ExtraNameSplitCursor

    FETCH NEXT FROM ExtraNameSplitCursor INTO @Ref, @Prefix, @Reference, @MergedName
    WHILE @@FETCH_STATUS = 0
        BEGIN
            INSERT INTO #TempOutput (ClientReference, Prefix, Reference, MergedFullName) 
            SELECT @Ref, @Prefix, @Reference, GUID, FROM dbo.fn_SPLIT_LIST_STRING (@MergedName)

            --SELECT CASE 
            --  WHEN @FormatName.GUID = 'Mr ' THEN @Title = 'Mr'
            --  WHEN LEFT(@MergedName,4) = 'Mrs ' THEN @Title = 'Mrs' 
            --  WHEN LEFT(@MergedName,5) = 'Miss ' THEN @Title = 'Miss'
            --  WHEN LEFT(@MergedName,3) = 'Ms ' THEN @Title = 'Ms'
            --  WHEN LEFT(@MergedName,3) = 'Dr ' THEN @Title = 'Dr'
            --  WHEN LEFT(@MergedName,4) = 'Rev ' THEN @Title = 'Rev'
            --  WHEN LEFT(@MergedName,5) = 'Lord ' THEN @Title = 'Lord'
            --  ELSE @Title = '' 
            --END AS Title,
            --CASE 
            --  WHEN MID(@MergedName,2,1) = ' ' THEN @FirstName = '' ELSE @FirstName = CHARINDEX(' ', MergedFullName + ' ') FROM #TempOutput AS FirstName

            FETCH NEXT FROM ExtraNameSplitCursor INTO @Ref, @Prefix, @Reference, @MergedName, @FlatNo, @HouseName, @HouseNo, @Street, @District, @PostTown, @County, @PostCode
        END

    CLOSE ExtraNameSplitCursor
    DEALLOCATE ExtraNameSplitCursor

    --Select statement for temporary table
    SELECT 
        ISNULL(ClientReference,'') AS ClientReference,
        ISNULL(Prefix,'') AS Prefix,
        ISNULL(Reference,'') AS Reference,
        ISNULL(MergedFullName,'') AS MergedFullName, 
        ISNULL(Title,'') AS Title,
        ISNULL(FirstName,'') AS FirstName,
        ISNULL(MiddleName,'') AS MiddleName,
        ISNULL(Surname,'') AS Surname

    FROM #TempOutput Result
    ORDER BY ClientReference
    for xml auto

    --Drop all temporary tables
    DROP TABLE #TempOutput
    DROP TABLE #StartResults

END

Ответы на вопрос(1)

Ваш ответ на вопрос