Es sei denn, Sie möchten in dynamisches SQL einsteigen. Da Sie "sauber" geschrieben haben, gehe ich davon aus, dass dies nicht der Fall ist.
Bearbeiten: Da er um ein dynamisches SQL-Beispiel gebeten hat, werde ich es versuchen. Ich bin im Moment mit keinen Datenbanken verbunden, daher ist dies aus meinem Kopf heraus und wird mit ziemlicher Sicherheit überarbeitet werden müssen. Aber hoffentlich trifft es den Geist der Dinge:
-- Get list of columns in table
SELECT INTO #t
EXEC sp_columns @table_name = N'TargetTable'
-- Create a comma-delimited string excluding the identity column
DECLARE @cols varchar(MAX)
SELECT @cols = COALESCE(@cols+',' ,'') + COLUMN_NAME FROM #t WHERE COLUMN_NAME <> 'id'
-- Construct dynamic SQL statement
DECLARE @sql varchar(MAX)
SET @sql = 'INSERT INTO TargetTable (' + @cols + ') ' +
'SELECT ' + @cols + ' FROM TargetTable WHERE SomeCondition'
PRINT @sql -- for debugging
EXEC(@sql)