Tengo una tabla como esta:
Id_Tabla | Cod_Fila | Id_Padre
-------------------------------------------------------
10 | 05 | null
20 | 13 | 10
30 | 04 | 20
estoy tratando de desarrollar una funcion que me devuelva:
05.13.04 es decir la concatenacion del campo: Cod_Fila
a esta funcion le pasaria como parametro el Id_Tabla
por ejemplo:
fCodUbicacion (@Id_Tabla) = fCodUbicacion (30)
y que vaya llamandose con el identificador padre (campo: Id_Padre) y
concatenandose hasta que al final encuentre el valor Id_Padre = null y
termine el proceso
Espero su ayuda, gracias de antemano
Si bien T-SQL no es un lenguaje recursivo en sentido estricto, un stored
procedure puede invocarse recursivamente (con un tope máximo de 32
invocaciones recursivas , controlar con @@NESTLEVEL).
Pero las clausuras transitivas tienen varios algoritmos no-recursivos muy
adecuados que pueden implementarse en T-SQL.
Voy a ver si puedo traer un buen ejemplo.
--
Gustavo Larriera, MSFT MVP-SQL
Uruguay LatAm
---
This message is provided "AS IS" with no warranties expressed or implied,
and confers no rights.
---
"Carlos" <140...@ing.unmsm.edu.pe> wrote in message
news:ut$h8ePcD...@TK2MSFTNGP10.phx.gbl...
--
--
Un saludo
--
--
----------------------------------------------
"Sólo sé que no sé nada. " (Sócrates)
Por favor, responder únicamente al foro
Se agradece la inclusión de sentencias DDL
Archivo de respuestas anteriores en:
http://groups.google.com/groups?hl=es&lr=&ie=UTF-8&group=microsoft.public.es
.sqlserver
(Guía de netiquette del foro)
http://www.helpdna.net/bosqlfaq00.htm
http://perso.wanadoo.es/rubenvigon/foro
(FAQ's de SQL Server)
http://support.microsoft.com/default.aspx?scid=/support/sql/70faq.asp
http://www.helpdna.net/bosqlfaq.htm
"Carlos" <140...@ing.unmsm.edu.pe> escribió en el mensaje
news:ut$h8ePcD...@TK2MSFTNGP10.phx.gbl...
create table Tabla
(
IdTabla int primary key,
CodFila char(2) not null,
IdPadre int null
)
go
insert into Tabla values( 10, '05', null)
insert into Tabla values( 20, '13', 10)
insert into Tabla values( 30, '04', 20)
go
create function Localizacion( @IdTabla int )
returns varchar(50)
as
begin
declare @Localizacion varchar(50), @CodFila char(2), @IdPadre int
select @CodFila = CodFila, @IdPadre = IdPadre
from Tabla
where IdTabla = @IdTabla
if @IdPadre is null
set @Localizacion = @CodFila
else
set @Localizacion = dbo.Localizacion( @IdPadre ) + '.' + @CodFila
return @Localizacion
end
go
select dbo.Localizacion(30)
go
--
Saludos:
Jesús López
MVP Microsoft .NET
MCP SQL Server
"Carlos" <140...@ing.unmsm.edu.pe> escribió en el mensaje
news:ut$h8ePcD...@TK2MSFTNGP10.phx.gbl...
create function Localizacion2( @IdTabla int )
returns varchar(50)
as
begin
declare @Localizacion varchar(50), @CodFila char(2), @IdPadre int
while 1 = 1
begin
select @CodFila = CodFila, @IdPadre = IdPadre
from Tabla
where IdTabla = @IdTabla
if @Localizacion is null
set @Localizacion = @CodFila
else
set @Localizacion = @CodFila + '.' + @Localizacion
if @IdPadre is null
break
else
set @IdTabla = @IdPadre
end
return @Localizacion
end
go
Es mejor la versión iterativa ya que es más eficiente y además no tiene el
límite de 32 como nivel máximo de anidamiento
"SqlRanger" <jesusl...@navegalia.com> escribió en el mensaje
news:ekO1RUTc...@TK2MSFTNGP11.phx.gbl...
--
Gustavo Larriera, MSFT MVP-SQL
Uruguay LatAm
---
This message is provided "AS IS" with no warranties expressed or implied,
and confers no rights.
---
"SqlRanger" <jesusl...@navegalia.com> wrote in message
news:ekO1RUTc...@TK2MSFTNGP11.phx.gbl...