Q:

Split column into multiple columns based on character count

I currently have only one column in a table.  Each row contains the exact same amount of characters.  I need a way to be able to split this one column into multiple columns.  The table has over 1.1 million rows, so efficiency in code is pretty important.  All of the rows are set up with the same structure, meaning the first 5 characters are always dedicated for firstname, the next 6 are always for lastname for example.  I know how to take the left most characters using: 
insert into table2
select left(column1,2), substring(column1, 3, len(column1) ) from table1

The problem with the above, is that 1) it creates a new table instead of modifying the existing.  And 2) Once I have the first set of characters split into a column I don't know how to grab the next set.
Below is an example of how I would like it to work:
Current
Column 1

abcdefghijklmnop
qrstuvwxyz123456

What I would like:
Column 1 ----------- Column 2 --------- Column 3

abcdefg--------------hij----------------klmnop
qrstuvw--------------xyz----------------123456

picture below:

I can usually fix this through how I important the data in SQL.  However the txt file that I use to import the data has no way to dilimate the columns correctly so it has to all be brought in as one column.

A:

Here is the exact scenario that you have mentioned here. 
DROP TABLE dbo.table1
DROP TABLE dbo.table2

CREATE TABLE dbo.table1
 (column1 VARCHAR(100))

CREATE TABLE dbo.table2
 (column1 VARCHAR(100),
  column2 VARCHAR(100),
  column3 VARCHAR(100)
 )

INSERT INTO dbo.table1
VALUES ('abcdefghijklmnop'),('qrstuvwxyz123456')

INSERT INTO dbo.table2
SELECT LEFT(column1,7) AS column1,SUBSTRING(column1,8,3) column2,RIGHT(column1,6) column3
FROM dbo.table1

SELECT *
FROM table1

SELECT *
FROM table2

