2011-10-30 18 views
5

Tengo un problema con mi situación actual, busqué a través de cualquier solución en la red pero todavía no puedo conseguirlo.SQL Server: creación de la tabla de temperatura con la columna dinámica

Aquí la pregunta:

Tengo un montón de sentencias SQL que necesitan ser ejecutados en un procedimiento almacenado mediante cursor dentro, cada uno de los estados está realizando una inserción mediante la selección de una base de datos diferente, así como mesa.

Por ejemplo:

INSERT INTO Database1.Table1(column1, column2, column3) 
    SELECT column1,column2, column3 
    FROM Database2.Table2 
    WHERE --Some Condition 

y tal vez otra sentencia SQL ejecutada es así

INSERT INTO Database1.Table3(column1, column2, column3, column4) 
    SELECT column1, column2, column3, column4 
    FROM Database3.Table3 
    WHERE --Some Condition 

bien, básicamente, mi proceso es como esto

Execute Sql to insert into temp Tables --> Insert into a permanent Table from Temp Tables 

Desde arriba dos sentencias SQL , mi resultado ejecutado desde database2 o 3 o puede ser 4,5 y etc. Iré a mi base de datos1 f o tienda permanente. En una forma más resumida de decir que es así, solo quiero hacer otra copia de los datos que provienen de diferentes fuentes de bases de datos y almacenarlas en mi base de datos local para hacer un procesamiento adicional.

Mi problema principal es que mi persona a cargo (o gerente) me dijo que insertara todos los resultados ejecutados en una tabla TEMP o #Table antes de ejecutar en el permanente.

Algo como esto:

INSERT INTO #Table3(column1, column2, column3, column4) 
    SELECT column1, column2, column3, column4 
    FROM Database3.Table3 
    WHERE --Some Condition 

me pasó por algunas investigaciones sobre #Temp mesas y me pareció que la mayoría de ellos es la creación de la columna de 'fijar' tales como

CREATE TABLE #Table 
(
    column1 VARCHAR(10), 
    column2 VARCHAR(10), 
    column3 VARCHAR(10) 
) 

PROBLEMA: ¿hay de todos modos para crearlo con columnas dinámicas? Más detalle de la forma de preguntar, ¿hay alguna forma de insertar seleccionando en una tabla #Temp sin prefijo la columna? Porque eso es imposible para mí crear un grupo de tablas temporales para cada SQL ejecutado.

Gracias

PS 1: Soy bastante novato en SQL Server, por favor no dude en expresar mi error o error. Todos aprendemos de los errores.

PD 2: Perdón por mi pobre nivel de inglés, hice todo lo posible para explicarlo más claramente.

Saludos:

LiangCk

+2

Puede utilizar SELECT coloum1, coloum2, coloum3, coloum4 EN # Tabla3 DE Database3.Table3' para crear una tabla en base a los resultados de la 'SELECT'. ¿Es eso lo que quieres decir? –

+0

No, esto no es necesario porque podría tratarse de unos cientos de sql que pueden tener cada uno de ellos teniendo diferentes colores. Si hago lo que has hecho, ¿eso significa que creo unos cientos de tabla Temp? – Worgon

+0

No estoy seguro de lo que quiere lograr; según tengo entendido, tiene varias tablas con diferentes columnas, y necesita insertar estos datos en una tabla temporal. ¿No puede hacer una copia de seguridad y restaurar toda la base de datos en una base de datos temporal? O eso, o tendrá que administrar un montón de diferentes tablas temporales. –

Respuesta

5

Usted dice que desea algo así como

 


INSERT INTO #Table3(coloum1,coloum2,coloum3,coloum4) 
Select coloum1,coloum2,coloum3,coloum4 
FROM Database3.Table3 
WHERE --Some Condition 

 

sin tener que crear la tabla temporal con columnas fijas en primer lugar.

Esto funcionaría:

 


Select coloum1,coloum2,coloum3,coloum4 
INTO #Table3 
FROM Database3.Table3 
WHERE --Some Condition 

 

Usted no tiene que crear la tabla temporal o especificar las columnas primera, sólo tiene que seleccionar en la tabla temporal y será creado sobre la marcha.

Parece que quieres hacer algo más que esto ... No entiendo muy bien qué es eso, pero suena como quizás seleccionar todos tus datos de varias tablas en una única tabla temporal (no 'No sé por qué querría hacer esto) ... Si ese es el caso, entonces UNION o UNION ALL deberían funcionar. Todavía puede usarlos con la tabla temporal creada dinámicamente.

 


Select coloum1,coloum2,coloum3,coloum4 
INTO #Table3 
FROM Database3.Table3 
WHERE --Some Condition 

UNION 

Select column1, column2, column3, null 
FROM Database1.Table1 
WHERE --Some condition 

 

El null anterior es sólo para dar el segundo seleccione el mismo número de columnas como el primero (I utilizado tanto selecciona a partir de su post); este es un requisito para UNION.

+0

ya, gracias Jeremy ... esto es lo que necesitaba ... – Worgon

Cuestiones relacionadas