Puede usar una combinación para crear y completar la nueva tabla de una vez:
SELECT
t.*
INTO
dbo.NewTable
FROM
dbo.TableWithIdentity AS t
LEFT JOIN dbo.TableWithIdentity ON 1 = 0
;
Debido a la 1 = 0
condición, el lado derecho no tendrá coincidencias y, por lo tanto, evitará la duplicación de las filas del lado izquierdo, y como se trata de una unión externa, las filas del lado izquierdo tampoco se eliminarán. Finalmente, como se trata de una unión, se elimina la propiedad IDENTITY.
Seleccionar solo las columnas del lado izquierdo, por lo tanto, producirá una copia exacta de dbo.TableWithIdentity solo en términos de datos, es decir, con la propiedad IDENTITY despojada.
Dicho todo esto, Max Vernon ha planteado un punto válido en un comentario que vale la pena tener en cuenta. Si observa el plan de ejecución de la consulta anterior:
notará que la tabla fuente se menciona en el plan de ejecución solo una vez. La otra instancia ha sido eliminada por el optimizador.
Por lo tanto, si el optimizador puede establecer correctamente que el lado derecho de la combinación no es necesario en el plan, debería ser razonable esperar que en una versión futura de SQL Server pueda darse cuenta de que la propiedad IDENTITY no necesita ser eliminado tampoco, ya que ya no hay otra columna IDENTIDAD en el conjunto de filas de origen de acuerdo con el plan de consulta. Eso significa que la consulta anterior podría dejar de funcionar como se esperaba en algún momento.
Pero, como lo señaló correctamente ypercubeᵀᴹ , hasta ahora el manual ha declarado explícitamente que si hay una unión, la propiedad IDENTITY no se conserva:
Cuando se selecciona una columna de identidad existente en una nueva tabla, la nueva columna hereda la propiedad IDENTITY, a menos que [...] la instrucción SELECT contenga una unión.
Por lo tanto, mientras el manual lo siga mencionando, probablemente podamos estar seguros de que el comportamiento seguirá siendo el mismo.
Felicitaciones a Shaneis y ypercubeᵀᴹ por mencionar un tema relacionado en el chat.
JOIN (SELECT 1) AS dummy ON 1 = 1
Funcionaría también?