This is idempotent and with no loops. Good luck!
IF OBJECT_ID(N'dbo.SecondTable') IS NULL
CREATE TABLE dbo.SecondTable (id INT NOT NULL IDENTITY PRIMARY KEY);
DECLARE @tsql NVARCHAR(MAX) = N'';
SELECT @tsql = @tsql + N'
IF NOT EXISTS (SELECT 1 FROM sys.columns WHERE object_id = OBJECT_ID(N''dbo.SecondTable'') AND name = N''' + CONVERT(NVARCHAR(10), DateP, 111) + ''')
ALTER TABLE dbo.SecondTable ADD [' + CONVERT(NVARCHAR(10), DateP, 111) + N'] NVARCHAR(50);'
FROM dbo.FirstTable
ORDER BY id;
PRINT @tsql;
EXEC sys.sp_executesql @tsql;