18/09/2007, 14:03
|
| Colaborador | | Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 20 años 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. |