Please forgive my ignorance - but this seems like a lot of extra overhead:
DECLARE @max_id INT
SET @max_id = (SELECT max(contactid) FROM [Adventureworks].[Person].[Contact])
INSERT INTO Contacts
SELECT TOP 1000000 --<<<--THE NUMBER OF ROWS!
FirstName = (SELECT TOP 1 FirstName
FROM adventureworks.person.contact
WHERE ContactID = ABS(CONVERT(BINARY(6),NEWID()) % @max_id) + 1),
LastName = (SELECT TOP 1 LastName
FROM adventureworks.person.contact
WHERE ContactID = ABS(CONVERT(BINARY(6),NEWID()) % @max_id) + 1)
FROM
Master.dbo.SysColumns t1,
Master.dbo.SysColumns t2
GO
Is there a downside to a single update/select without all the additional subqueries and functions you have in the article?
INSERT INTO Contacts (FirstName, LastName)
SELECT TOP 100000
FirstName,
LastName
FROM [Adventureworks].[Person].[Contact]
Maybe there's something that I just don't understand (I'm relatively new to this stuff)