I'm shooting off soon so thought I would quickly tidy it up. 1) Not tested (not got SS on this PC)2) It should actually compile this time3) Only one scan of information_schema view4) Execution plan is cached until table's schema is changed.5) Also the whole premise is flawed since this can only be possible if your only key constraint is on the identity which is a design problem.CREATE PROC duplicate_row( @my_primary_key AS INT)ASDECLARE @sql_stmt AS nvarchar(MAX) , @param_def AS nvarchar(20)SELECT @sql_stmt = COALESCE(@sql_stmt + ', ', '') + COLUMN_NAMEFROM INFORMATION_SCHEMA.COLUMNSWHERE TABLE_NAME = 'My_Table'AND COLUMN_NAME NOT IN ('my_primary_key','title')SELECT @sql_stmt = N'INSERT INTO Mydb.dbo.My_Table (' + @sql_stmt + ', title) SELECT ' + @sql_stmt + ', title + ''_copy'' AS title FROM Mydb.dbo.My_Table WHERE my_primary_key = @my_primary_key' , @param_def = N'@my_primary_key INT'EXECUTE dbo.sp_executesql @sql_stmt, @param_def, @my_primary_key = @my_primary_keyGOSome reading:http://www.sommarskog.se/dynamic_sql.htmlEDIT - formatting & point 5.