Ver Mensaje Individual
  #9 (permalink)  
Antiguo 18/09/2007, 14:03
Avatar de Andres95
Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 5 meses
Puntos: 38
Re: Orden especifico



Código:
 I'm trying to free your mind, Neo. But I can only show you the door. You're the one that has to walk through it.....
jejeje perdon, solo me acorde de la frase....

Ok, va... perdonen lo burdo del ejemplo pero no dispongo de mucho tiempo para la elaboracion... espero les sea de utilidad...


Primero, tomando como base la respuesta proporcionada por Daniel anteriormente , se construye el sp de utileria, este es basico y se puede ocupar en multiples ocasiones.

Código:
------------------------------------------------------------
-- Stored de Utileria
------------------------------------------------------------
Create Procedure dbo.ListToTable (@lstCadena varchar(8000))
AS
DECLARE  @lstDato varchar(7)
        ,@lnuPosComa int

Declare @MiTabla Table (iRow int Identity(1,1), Campo  int)
Set nocount on

WHILE  LEN(@lstCadena)> 0
BEGIN
	SET @lnuPosComa = CHARINDEX(',', @lstCadena ) -- Buscamos el caracter separador
	IF (@lnuPosComa = 0)
	BEGIN
		SET @lstDato = ltrim(rtrim(@lstCadena))
		SET @lstCadena = ''
	END
	ELSE
	BEGIN
		SET @lstDato = ltrim(rtrim(Substring( @lstCadena , 1  , @lnuPosComa-1)))
		SET @lstCadena = Substring( @lstCadena , @lnuPosComa + 1 , LEN(@lstCadena))
	END
	Insert into @MiTabla (Campo) values(cast(@lstDato as int))
END

Select * from @MiTabla
GO

En seguida se genera la info de pruebas y se realiza la consulta....

Código:
Set nocount on


If object_id('tempdb..#tmpData') is not null Drop Table #tmpData

Create table #tmpData (Camponoparam varchar(100), OtroCamponoparam int, Campo  int)
Insert into #tmpData (CampoNoParam, OtroCampoNoParam, Campo) values ('ssss', 90,   100)
Insert into #tmpData (CampoNoParam, OtroCampoNoParam, Campo) values ('dddd', 1,    101)
Insert into #tmpData (CampoNoParam, OtroCampoNoParam, Campo) values ('ffff', 45,   102)
Insert into #tmpData (CampoNoParam, OtroCampoNoParam, Campo) values ('gggg', 33,   103)
Insert into #tmpData (CampoNoParam, OtroCampoNoParam, Campo) values ('nnnn', 95,   104)
Insert into #tmpData (CampoNoParam, OtroCampoNoParam, Campo) values ('rrrr', 9,    105)
Insert into #tmpData (CampoNoParam, OtroCampoNoParam, Campo) values ('vvvv', 326,  106)
Insert into #tmpData (CampoNoParam, OtroCampoNoParam, Campo) values ('bbbb', 23,   107)
Insert into #tmpData (CampoNoParam, OtroCampoNoParam, Campo) values ('qqqq', 98,   108)
Insert into #tmpData (CampoNoParam, OtroCampoNoParam, Campo) values ('oooo', 1023, 109)
Insert into #tmpData (CampoNoParam, OtroCampoNoParam, Campo) values ('hhhh', 19,   110)

-------------------------------------------------------------------------------------



Declare @lstCadena varchar(8000)
SET @lstCadena ='104,110, 120, 100, 108,107'		--Cadena de Ejemplo.

If object_id('tempdb..#tmpMiTabla') is not null Drop Table #tmpMiTabla
Create table #tmpMiTabla (iRow int , Campo  int)


Insert into #tmpMiTabla (iRow, Campo)
Execute dbo.ListToTable @lstCadena

------------------------------------------------------------
-- Seleccionando en el orden establecido en el parametro
------------------------------------------------------------
Select D.*
From   #tmpMiTabla M
Inner join
      #tmpData D
On    M.Campo = D.Campo
Order by 
      M.iRow
Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.