Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Problema para tomar los datos en tabla temporal

Estas en el tema de Problema para tomar los datos en tabla temporal en el foro de SQL Server en Foros del Web. buen día... y espero me ayuden un poco con esta consulta! inicialmente lo que busco es almacenar en una temporal todas las referencias que me ...
  #1 (permalink)  
Antiguo 17/08/2012, 16:50
Avatar de jhodmar  
Fecha de Ingreso: febrero-2012
Ubicación: Medellin
Mensajes: 52
Antigüedad: 12 años, 2 meses
Puntos: 1
Exclamación Problema para tomar los datos en tabla temporal

buen día... y espero me ayuden un poco con esta consulta!
inicialmente lo que busco es almacenar en una temporal todas las referencias que me cumplan con la condicion! ....

para insertar esas referencias en la tabla temporal debo tener los condicionales que son variables por eso paso toda la consulta por que es formada fuera de sql.. por que no logre como formar ese condicional compuesto (id_zona =15 OR id_zona =16 OR id_zona =17 OR id_zona =18
OR id_zona =19 OR id_zona =20 OR id_zona =21 OR id_zona =22) al igual que el IdNodo puede ser variable...
una vez creada mi tabla temporal debo recorrerla y ese es el problema...
la temporal si es creada pero no se como recorrerla y sacar referencia a referencia ya que necesito llenar otra temporal donde almacena las cantidades finales del inventario al final de cada periodo (cabe aclarar que una referencia no se puedo mover en N dia mientras que otra si se movio ese dia por eso la necesidad de buscar referencia referencia)por periodos de x referencia! recorriendo entre fechas

como haria para que en el siguiente codigo la variable @referencia me tome la referencia de la temporal por que el ciclo ya lo tengo o eso creo!
Código:
while @@rowcount <> 0--que existan filas mientras tomo las demas referencias
								begin--**
									set rowcount 0
mas o menos el codigo de arriba seria el ciclo... ahora bien con el codigo siguiente intento por lo menos tomar una referencia de la temporal y me bota el error que esta al final de todo!
Código:
--drop table #Temp_Referencias
declare @sql nvarchar (2000)
declare @sqlReferencia nvarchar(2000)
declare @referencia varchar(11)--alomacena cada una de las referencias de los productos en cada pasada!
DECLARE @ParmetroDefinition nvarchar(500)
set @sql ='select distinct(referencia)into #Temp_Referencias from TBL_INV_ITEM
	where idNodo=19 OR idNodo =20
	and Referencia in 
			(select distinct(Referencia) 
			  from TBL_INV_RemFact_Pedidos
			  where NroPedido in 
							(select NroPedido 
		from TBL_VYD_DetallesP
		where id_zona =15 OR id_zona =16 OR id_zona =17 OR id_zona =18
OR id_zona =19 OR id_zona =20 OR id_zona =21 OR id_zona =22)
and Referencia in (select distinct(Referencia) from TBL_INV_ITEM where idTipo =7))'
EXECUTE sp_executesql @sql
		set rowcount 1--indico primera fila!
				set @sql =N'select @subReferencia_OUT = Referencia from #Temp_Referencias';
				set @ParmetroDefinition=N'@subReferencia_OUT varchar(11) OUTPUT';
				EXECUTE sp_executesql @sql,@ParmetroDefinition,@subreferencia_OUT=@Referencia OUTPUT;
				select @referencia
el mensaje es el siguiente... como pueden ver las filas de la temporal si se afectan... e dice que afecto a 9 refencias! y eso es correcto
Código:
(9 filas afectadas)
Mens. 208, Nivel 16, Estado 0, Línea 1
El nombre de objeto '#Temp_Referencias' no es válido.
pienso por que ejecuto la temporal de la forma! EXECUTE sp_executesql @sql pero debo hacerlo asi ya que el condicional es variable y es formado fuera de SQL y es pasado como un parametro!

espero me ayuden y gracias de antemano!
  #2 (permalink)  
Antiguo 18/08/2012, 03:27
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 9 meses
Puntos: 40
Respuesta: Problema para tomar los datos en tabla temporal

No entendi todo lo que intentaste hacer, pero tengo dos comentarios:

1. La tabla temporal existe solamente en el ambito del peocedimiento donde esta creada, y los peocedimientos secundarios que estan llamados (SQL dinamico es tambien un procedimiento separado).
Si creas la tabla temporal en el primer SQL dinamico- el procedimiento principal no puede ver la, y tampoco el segundo SQL dinamico. En este caso la tabla debe ser creada en el procedimiento principal.

2. En lugar de
where id_zona =15 OR id_zona =16 OR id_zona =17 OR id_zona =18
OR id_zona =19 OR id_zona =20 OR id_zona =21 OR id_zona =22
Intenta asi
where id_zona In (15,16,17,18,19,20,21,22)
o asi
where id_zona Between 15 And 22
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #3 (permalink)  
Antiguo 21/08/2012, 09:01
Avatar de jhodmar  
Fecha de Ingreso: febrero-2012
Ubicación: Medellin
Mensajes: 52
Antigüedad: 12 años, 2 meses
Puntos: 1
Respuesta: Problema para tomar los datos en tabla temporal

GeriReshef gracias por responder, y si quizas le halla complicado un poco pero lo que quiero es tomar la referencia que se halla almacenado en la tabla temporal! , ademas de poner el condicional "where id_zona In (15,16,17,18,19,20,21,22)" es mejor estructurado pero al pasarle como parametro el '15,16,17,18,19,20,21,22' me bota error por que no puedo convertir nvarchar a int...
  #4 (permalink)  
Antiguo 21/08/2012, 09:08
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Problema para tomar los datos en tabla temporal

pues hacer asi directamente un convert de esto '3,4,5,6' a que te lo lea cada uno como parametro no es asi como lo estas manejando, lo que te sugiero es que crees tus tablas temporales con ## para que esten disponibles despues de ejecutar tu procedure :)

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 21/08/2012, 11:52
Avatar de jhodmar  
Fecha de Ingreso: febrero-2012
Ubicación: Medellin
Mensajes: 52
Antigüedad: 12 años, 2 meses
Puntos: 1
Respuesta: Problema para tomar los datos en tabla temporal

bueno agradezco a :
* GeriReshef: por la sugerencia de arreglar el condicional... mucho mas practico (Y)
* Libras: por la creación de la temporal con los signos "##" asi puedo acceder a las tablas temporales en cualquier momento!

realmente me sirvio y mucho!
  #6 (permalink)  
Antiguo 21/08/2012, 13:58
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 9 meses
Puntos: 40
Respuesta: Problema para tomar los datos en tabla temporal

La cadena '15,16,17,18,19,20,21,22' no es un conjunto de numeros, sino una cadena..
Para obtener un conjunto de numeros debes crear y utilizar una funcion que implica CLR o TSQL que haga SPLIT.
Sin embargo hay otra solucion mas simple y eficiente:
Código SQL:
Ver original
  1. SELECT *
  2. FROM   MiTabla
  3. WHERE ','+@MiCadena+',' LIKE '%,'+CAST(ID AS VARCHAR)+',%';
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #7 (permalink)  
Antiguo 21/08/2012, 14:35
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Problema para tomar los datos en tabla temporal

GeriReshef

Dudo mucho que ese filtro (Where), este bien.
__________________
MCTS Isaias Islas
  #8 (permalink)  
Antiguo 21/08/2012, 14:49
Avatar de jhodmar  
Fecha de Ingreso: febrero-2012
Ubicación: Medellin
Mensajes: 52
Antigüedad: 12 años, 2 meses
Puntos: 1
Sonrisa Respuesta: Problema para tomar los datos en tabla temporal

Bueno yo igual lo resolví de la sgte forma!

Código:
declare @CondicionalItem varchar(2000)='19,20,21,22'

set @sql ='select distinct(referencia)into ##Temp_Referencias from TBL_MiTabla
						where id in ('+@CondicionalItem+')'
EXECUTE sp_executesql @sql
como ven queda una simple concatenación de una cadena que despues con
EXECUTE sp_executesql @sql creo la tabla temporal...

ya otro cuento es buscar las referencias afectadas en la tabla temporal...
y lo logré así... la verdad no se si eso es bueno pero jamas habia programado tanto en sql mas que un simple Select acompañado de un condicional simple!
Código:
set @sqlReferencia =N'select @subReferencia_OUT = Referencia from ##Temp_Referencias';
			set @ParmetroDefinition=N'@subReferencia_OUT varchar(11) OUTPUT';
mi habilidad con SQL ha aumentado +1 jejeje igual gracias por sus aportes! (HUG's)

Etiquetas: insert, select, sql, tabla, temporal, tomar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:07.