Crear tabla temporal desde otra

21/04/2005 - 02:13 por Leopoldo Ramos | Informe spam
Hola, hay manera de en un store proc yo poder crear una tabla temporal
con igual estructura que otra tabla existente en la BD ? , tomando la
estructura desde esa tabla sin tener que detallar todos los campos. ?

LR

Preguntas similare

Leer las respuestas

#1 Maxi
21/04/2005 - 02:25 | Informe spam
Hola Leo, podrias revisar el comando Select Into

Veamos un ejemplo:

use northwind
go

select * into #pepe from customers where city='kk'


"Leopoldo Ramos" escribió en el mensaje
news:
Hola, hay manera de en un store proc yo poder crear una tabla temporal
con igual estructura que otra tabla existente en la BD ? , tomando la
estructura desde esa tabla sin tener que detallar todos los campos. ?

LR



Respuesta Responder a este mensaje
#2 Don Roque
21/04/2005 - 14:51 | Informe spam
Para enriquecer un poco mas la respuesta de Maxi.

El SQL SERVER maneja cada instruccion como una transaccion. Entonces,
si la tabla CUSTOMERS tiene 1000 registros, y 200 que cumplen con la
condicion "city='kk'"; si la instruccion se ejecuta bien, crea una
tabla temporal "#pepe" con 200 registros. Si no, no crea la tabla.

Hago esta aclaracion por lo siguiente:
Si vas a empezar a usar el SELECT INTO como estrategia para crear
tablas temporales, y los origenes de datos son grandes en cuanto a su
cantidad de registros, podes llegar a generar bloqueos.

Me explico un poco mas:

Cuando vos haces "select * into #pepe from customers where city='kk' ";
la misma instruccion crea la tabla y la llena. Ahora, Supongamos que la
sentencia "select * from customers where city='kk' " devuelve, digamos,
1.000.000 de registros; las tablas de sistema de la base TEMPDB van a
quedar bloqueadas hasta que la sentencia no termine de llenar la tabla
temporal. Si algun otro usuario ejecuta un SP que tenga la misma
tecnica, va a caer en un bloqueo hasta que la sentencia SELECT INTO
anterior termine.

Aunque es un poco mas trabajoso, te recomiendo que escribas esto mismo,
en dos sentencias:


select * into #pepe from customers where 0=1 /*esto crea la tabla
temporal con la misma estructura pero no la llena*/

insert into #pepe
select * from customers where city='kk'

Saludos y espero que tengas suerte!
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida