PDA

Ver la Versión Completa : Insertar datos en una tabla desde consulta en un SP


subzero
05-12-2007, 00:13:46
Hola amigos del club...


Siendo un poco directo tengo un inconveniente al realizar un procedimientos almacenado en SQL Server 2005 y no he encontrado algo que me permita orientarme un poco. Lo que estoy tratando de generar es un procedimiento en el cual se realice la consulta, luego se cree una tabla y hasta aqui todo esta bien el problema esta en ¿cómo puedo ingresar los datos resultantes de la consulta en la tabla que se crea en el procedimiento?, cabe anotar que normalmente trabajo en firebird y la sintaxis es un poco diferente les expongo mi códígo.

CREATE PROCEDURE dbo.sp_baja_rotacion
AS
BEGIN
declare @filas integer
SELECT DISTINCT
max(dbo.documentos_lin.fec) as fecha,
substring(dbo.documentos_lin.codigo,1,6) as codigo
FROM dbo.documentos_lin
WHERE
(dbo.documentos_lin.sw = 1) AND
(dbo.documentos_lin.tipo IN ('80','81','82','83'))
GROUP BY substring(dbo.documentos_lin.codigo,1,6)
create table temp_br(fec datetime, cod varchar(20))

ES AQUI DONDE QUISIERA HACER LA INSERCION

drop table temp_br
END

De antemano agradezco el interes que me prestan gracias.

subzero
05-12-2007, 15:26:30
Bueno... indagando un poco creo que me estaba complicando la cuestión era sencilla solo realice una consulta y la inserte en la tabla... gracias a todos aqui muestro como realice el proceso.....

create table temp_br(fec datetime, cod varchar(20))
insert into temp_br(fec, cod)
(SELECT DISTINCT
max(dbo.documentos_lin.fec) as fecha,
substring(dbo.documentos_lin.codigo,1,6) as codigo
FROM dbo.documentos_lin
WHERE
(dbo.documentos_lin.sw = 1) AND
(dbo.documentos_lin.tipo IN ('80','81','82','83'))
GROUP BY substring(dbo.documentos_lin.codigo,1,6))
select * from temp_br
/*drop table temp_br*/

javier7ar
05-12-2007, 16:18:19
Tambien podes usar SELECT INTO para que te cree la tabla automaticamente y no tenes que hacer el create table a mano. Y si la tabla es temporal y solo la vas a usar en el procedimiento almacenado, te conviene marcarla como tabla temporal con # antes del nombre de la tabla; con esto si te olvidas de hacer el drop de la tabla el SQL Server lo hace automatico cuando te desconectas.

SELECT DISTINCT max(dbo.documentos_lin.fec) as fecha,
substring(dbo.documentos_lin.codigo,1,6) as codigo
INTO #temp_br
FROM dbo.documentos_lin
WHERE
(dbo.documentos_lin.sw = 1) AND
(dbo.documentos_lin.tipo IN ('80','81','82','83'))

GROUP BY substring(dbo.documentos_lin.codigo,1,6)
-- ACA PODES TRABAJAR CON LA TABLA TEMPORAL
select * from #temp_br

-- SIEMPRE AL FINAL DEBERIAS BORRARLA
drop table #temp_br