SQL Azure no admite 'seleccionar en' – ¿Hay alguna otra manera?

Tengo una tabla muy complicada de la que me gustaría hacer una copy de security temporal mientras realizo algunos cambios. Normalmente, solo hago lo siguiente:

SELECT * INTO temp_User FROM dbo.[User] AS u 

Lamentablemente, estoy usando Azure, y parece que esto no es compatible:

Msg 40510, nivel 16, estado 1, línea 2 La instrucción "SELECT INTO" no se admite en esta versión de SQL Server.

¿Hay alguna forma de volver a crear esta característica en una function, potencialmente? Podría hacer esto escribiendo la tabla, creándola y luego insertando datos usando una statement select, pero dada la frecuencia con la que uso Azure, y en cuántas bases de datos necesito trabajar en esta área, esto es muy difícil de manejar.

La nueva vista previa de Azure DB Update tiene este problema resuelto:

La vista previa de V12 le permite crear una tabla que no tiene un índice agrupado. Esta característica es especialmente útil para su compatibilidad con la instrucción T-SQL SELECT … INTO que crea una tabla a partir de un resultado de consulta.

http://azure.microsoft.com/en-us/documentation/articles/sql-database-preview-whats-new/

Azure requiere un índice agrupado en todas las tablas, por lo tanto, SELECT INTO no es compatible.

Tendrás que:

 CREATE TABLE temp_User () --fill in table structure INSERT INTO temp_User SELECT * FROM dbo.[User] 

Para guiar la tabla fácilmente, puede escribir la suya o usar una de las respuestas a esta pregunta:

Script CREATE Table SQL Server

Actualización: como señaló Jordan B, V12 includeá soporte para montones (sin requisito de índice agrupado) lo que significa que SELECT INTO funcionará. En el momento en que V12 Preview está disponible, Microsoft por supuesto solo recomienda actualizar con bases de datos de testing.

Desafortunadamente no se puede hacer. Así es como trabajé alnetworkingedor de esto:

  1. Abrir SQL Server Management Studio
  2. Haga clic derecho sobre la table
  3. Seleccione Script como … Crear tabla
  4. Edite el script generado para cambiar el nombre de la tabla a lo que especificó en su consulta
  5. Ejecuta tu consulta
 INSERT INTO temp_User SELECT * FROM dbo.[User] 

Puedes probar lo de arriba. Básicamente es una selección que se aplica a una instrucción de inserción

http://blog.sqlauthority.com/2011/08/10/sql-server-use-insert-into-select-instead-of-cursor/

Supongamos que tiene una tabla con Id, Column1 y Column2. Entonces esta podría ser tu solución

 CREATE TABLE YourTableName_TMP .... GO SET IDENTITY_INSERT YourTableName_TMP ON GO INSERT INTO YourTableName_TMP ([Id] ,[Column1] ,[Column2]) SELECT [Id] ,[Column1] ,[Column2] FROM ( SELECT * FROM ( SELECT [Id] ,[Column1] ,[Column2] ROW_NUMBER() OVER(ORDER BY ID DESC) AS RowNum FROM YourTableName ) WHERE RowNum BETWEEN 0 AND 500000 ) GO SET IDENTITY_INSERT YourTableName_TMP OFF GO 

Primero crea una tabla temporal y luego inserta las filas en window. Es un desastre, lo sé. Mi experiencia es que al ejecutar esto usando SQL Server Management Studio desde un cliente se obtienen aproximadamente 200,000 filas por minuto.

Como se escribió anteriormente, necesita volver a escribir su consulta utilizando select para crear una tabla como

Es mi muestra. Estaba :

  select emrID, displayName --select into into #tTable from emrs declare @emrid int declare @counter int = 1 declare @displayName nvarchar(max) while exists (select * from #tTable) begin -- some business logic select top 1 @displayName = displayname from #tTable group by displayname update emrs set groupId = @counter where @displayName = displayname delete #tTable where @displayName = displayname set @counter = @counter + 1 end drop table #tTable 

Modificado :

  CREATE TABLE #tTable ([displayName] nvarchar(max)) --create table INSERT INTO #tTable -- insert to next select : select displayName from emrs declare @emrid int declare @counter int = 1 declare @displayName nvarchar(max) while exists (select * from #tTable) begin -- some business logic select top 1 @displayName = t.displayName from #tTable as t group by t.displayname update emrs set groupId = @counter where @displayName = displayname delete #tTable where @displayName = displayname set @counter = @counter + 1 end drop table #tTable 

No te olvides de dejar caer tu table temporal. Además, puede encontrar un ejemplo más simple con la descripción aquí: http://www.dnnsoftware.com/wiki/statement-select-into-is-not-supported-in-this-version-of-sql-server