Ayuda Trigger Update

06/09/2008 - 19:53 por Sashka | Informe spam
Hola, a ver si alguien me puede ayudar en esto que no encuentro la manera :(
Tengo una tabla para un menú, en donde el orden de presentación cuenta!

IdTopico Texto TopicoPadre Orden
13 Cosa 0 0
14 Algo 13 1
15 Aaaa 14 1
17 Bbbb 14 2
145 Cccc 14 3

OK, ahora supongamos que queremos cambiar el orden de presentación de los
tópicos y queremos que Cccc esté en el orden 1.

Bueno, yo cree una vista que numera...

SELECT *, ROW_NUMBER() OVER (PARTITION BY TopicoPadre
ORDER BY TopicoPadre, Orden) AS RowNumber
FROM Topicos

Y luego un trigger para el update...

SELECT @padre = (SELECT TopicoPadre FROM Inserted)
SELECT @new = (SELECT Orden FROM Inserted)
SELECT @cual = (SELECT TopicoId FROM Inserted)

UPDATE Topicos set Orden=RowNumber
FROM dbo.Topicos INNER JOIN
dbo.View_2 ON dbo.Topicos.TopicoId = dbo.View_2.TopicoId
WHERE miTemp.TopicoPadre=@padre and miTemp.TopicoId<>@cual

No hay forma... no me funciona..

Sashka
 

Leer las respuestas

#1 Carlos M. Calvelo
07/09/2008 - 00:10 | Informe spam
Hola Sashka,

On 6 sep, 19:53, "Sashka" wrote:
Hola, a ver si alguien me puede ayudar en esto que no encuentro la manera :(
Tengo una tabla para un menú, en donde el orden de presentación cuenta!

IdTopico     Texto            TopicoPadre    Orden
13                Cosa                   0                     0
14                Algo                    13                   1
15          Aaaa                14              1
17          Bbbb                14              2
145         Cccc                14              3

OK, ahora supongamos que queremos cambiar el orden de presentación de los
tópicos y queremos que Cccc esté en el orden 1.

Bueno, yo cree una vista que numera...

SELECT     *, ROW_NUMBER() OVER (PARTITION BY TopicoPadre
ORDER BY TopicoPadre, Orden) AS RowNumber
FROM        Topicos

Y luego un trigger para el update...

SELECT @padre = (SELECT TopicoPadre FROM Inserted)
SELECT @new = (SELECT Orden FROM Inserted)
SELECT @cual = (SELECT TopicoId FROM Inserted)

    UPDATE Topicos set Orden=RowNumber
        FROM         dbo.Topicos INNER JOIN
                 dbo.View_2 ON dbo.Topicos.TopicoId = dbo.View_2.TopicoId
    WHERE miTemp.TopicoPadre=@padre and miTemp.TopicoId<>@cual

No hay forma... no me funciona..

Sashka



En el trigger para update puedes intentar algo así:

update topicos
set orden = t.orden + 1
from topicos t join inserted i on t.topicopadre=i.topicopadre and
t.orden>=i.orden
where t.idtopico<> i.idtopico

Saludos,
Carlos

Preguntas similares