• Maybe it's just me but it seems like overcomplicating the matter. As Gail suggested just use a normal VARCHAR column which can be updated any time. This logic can be applied at the application layer or a stored procedure which is updating the table. A one time update can be done to existing rows if the column was added after the fact.

    CREATE TABLE TestTable (ID INT IDENTITY, FirstName VARCHAR(50), LastName VARCHAR(50), NickName VARCHAR(101))

    GO

    CREATE PROCEDURE InsertTest @FirstName VARCHAR(50), @LastName VARCHAR(50), @NickName VARCHAR(101) = NULL AS

    IF @NickName IS NULL

    INSERT INTO dbo.TestTable( FirstName, LastName, NickName )

    VALUES ( @FirstName, @LastName, CONCAT(@LastName,' ',@FirstName))

    ELSE

    INSERT INTO dbo.TestTable( FirstName, LastName, NickName )

    VALUES ( @FirstName, @LastName, @NickName)

    GO

    dbo.InsertTest @FirstName = 'Joe', @LastName = 'Someone'

    GO

    dbo.InsertTest @FirstName = 'Jane', @LastName = 'Doe', @NickName = 'Awesome'

    SELECT * FROM dbo.TestTable

    DROP TABLE dbo.TestTable

    DROP PROCEDURE dbo.InsertTest


    SELECT quote FROM brain WHERE original = 1
    0 rows returned