It's been a slow afternoon so : DECLARE @iterations INT SET @iterations = 100DECLARE @rows INT SET @rows = 1SET NOCOUNT ONIF OBJECT_ID('tempdb..#field1') IS NOT NULL DROP TABLE #field1IF OBJECT_ID('tempdb..#field2') IS NOT NULL DROP TABLE #field2CREATE TABLE #field1 ( [x] INT , [y] INT )CREATE TABLE #field2 ( [x] INT , [y] INT )INSERT #field1 ( [x] , [y] ) SELECT 0, 0UNION SELECT 1, 0UNION SELECT 2, 0UNION SELECT 2, 1UNION SELECT 1, 2WHILE @iterations > 0 BEGIN PRINT 'Iteration : ' + CAST(@iterations AS VARCHAR(50)) INSERT INTO #field2 ( [x] , [y] ) SELECT [x] , [y] FROM ( SELECT spawns.[x] , spawns.[y] , COUNT(*) AS [neighbours] , MAX(CASE WHEN f.[x] IS NULL THEN 1 ELSE 0 END) AS [new] FROM ( SELECT [x] + 1 AS [x], [y] AS [y] FROM #field1 UNION ALL SELECT [x] - 1 AS [x], [y] AS [y] FROM #field1 UNION ALL SELECT [x] AS [x], [y] + 1 AS [y] FROM #field1 UNION ALL SELECT [x] AS [x], [y] - 1 AS [y] FROM #field1 UNION ALL SELECT [x] + 1 AS [x], [y] + 1 AS [y] FROM #field1 UNION ALL SELECT [x] + 1 AS [x], [y] - 1 AS [y] FROM #field1 UNION ALL SELECT [x] - 1 AS [x], [y] + 1 AS [y] FROM #field1 UNION ALL SELECT [x] - 1 AS [x], [y] - 1 AS [y] FROM #field1 ) spawns LEFT JOIN #field1 f ON f.[x] = spawns.[x] AND f.[y] = spawns.[y] GROUP BY spawns.[x] , spawns.[y] ) field WHERE (field.[neighbours] = 3 AND [new] = 1) OR (field.[neighbours] BETWEEN 2 AND 3 AND [new] = 0) SET @rows = @@ROWCOUNT IF @rows = 0 BREAK TRUNCATE TABLE #field1 IF @iterations = 0 BEGIN INSERT #field1 SELECT * FROM #field2 BREAK END SET @iterations = @iterations - 1 PRINT 'Iteration : ' + CAST(@iterations AS VARCHAR(50)) INSERT INTO #field1 ( [x] , [y] ) SELECT [x] , [y] FROM ( SELECT spawns.[x] , spawns.[y] , COUNT(*) AS [neighbours] , MAX(CASE WHEN f.[x] IS NULL THEN 1 ELSE 0 END) AS [new] FROM ( SELECT [x] + 1 AS [x], [y] AS [y] FROM #field2 UNION ALL SELECT [x] - 1 AS [x], [y] AS [y] FROM #field2 UNION ALL SELECT [x] AS [x], [y] + 1 AS [y] FROM #field2 UNION ALL SELECT [x] AS [x], [y] - 1 AS [y] FROM #field2 UNION ALL SELECT [x] + 1 AS [x], [y] + 1 AS [y] FROM #field2 UNION ALL SELECT [x] + 1 AS [x], [y] - 1 AS [y] FROM #field2 UNION ALL SELECT [x] - 1 AS [x], [y] + 1 AS [y] FROM #field2 UNION ALL SELECT [x] - 1 AS [x], [y] - 1 AS [y] FROM #field2 ) spawns LEFT JOIN #field2 f ON f.[x] = spawns.[x] AND f.[y] = spawns.[y] GROUP BY spawns.[x] , spawns.[y] ) field WHERE (field.[neighbours] = 3 AND [new] = 1) OR (field.[neighbours] BETWEEN 2 AND 3 AND [new] = 0) SET @rows = @@ROWCOUNT IF @rows = 0 BREAK TRUNCATE TABLE #field2 SET @iterations = @iterations - 1ENDSELECT * FROM #field1
Charlie===============================================================Msg 3903, Level 16, State 1, Line 1736The ROLLBACK TRANSACTION request has no corresponding BEGIN TRANSACTION