SQL Server - Error al ejecutar Trigger

 
Vista:
sin imagen de perfil
Val: 8
Ha disminuido su posición en 3 puestos en SQL Server (en relación al último mes)
Gráfica de SQL Server

Error al ejecutar Trigger

Publicado por Manuel (3 intervenciones) el 26/12/2020 12:15:04
Buenas tardes y feliz navidad a todos.

Ante todo indico que soy un principiante en el mundo SQL y recientemente me ha surgido la necesidad de implementar la generación automática de un número de serie secuencial en función del proyecto con el que estemos trabajando, así pues investigando cómo hacerlo, creo que lo mejor para mi caso es usar un Trigger.

En este caso, por ser mi primera vez y tras mucha lectura, he llegado a construir este script:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ALTER TRIGGER [dbo].[TR_Deliveries_AI] ON [dbo].[tbDeliveries] AFTER INSERT AS
BEGIN
DECLARE @idtomodify int
SELECT @idtomodify = Id from inserted
DECLARE @lastproject nvarchar(8)
SELECT @lastproject = IdProject  from inserted
DECLARE @lastline int
SELECT TOP 1 Line
FROM tbDeliveries
WHERE IdProject = @lastproject
ORDER BY Id DESC
UPDATE tbDeliveries
SET Line = @lastline+1
WHERE Id = @idtomodify
End

Sin embargo no se ejecuta, porque recibo un error similar a este:

"La instrucción DLM no puede tener desencadenadores habilitados si la instrucción contiene una cláusula OUTPUT sin una cláusula INTO".

¿Alguien puede decirme en qué estoy fallando?

Saludos y gracias por adelantado.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Error al ejecutar Trigger

Publicado por anonymous (19 intervenciones) el 26/12/2020 13:27:51
Y para que te complicas la vida haciendo esas cosas.

Si es que cuando tu creas las estructuras donde almacenarás tus datos, desde ahi mismo le indicas que el campo sea autoincremental así:

ColumnaXXX int(4) NOT NULL AUTO_INCREMENT

Y si en algún momento requieres obtener el último id generado, simplemente con la instrucción: @@identity lo obtienes, asignando ese valaor a cualquier variable dentro de un procedimiento almacenado en Mysql.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 8
Ha disminuido su posición en 3 puestos en SQL Server (en relación al último mes)
Gráfica de SQL Server

Error al ejecutar Trigger

Publicado por Manuel (3 intervenciones) el 26/12/2020 14:06:15
Hola Jorge,

La tabla tiene un número autoincremental que corresponde con el Id del registro, y el cual uso como PK.

Lo que busco concretamente es que debe ser independiente de este valor Id.

La cuestión está en que ese "líne" tiene la función de generar un número de serie diferenciado por código de proyecto. Es como un número de documento, que en este caso es número de entrega para el código de proyecto que se haya insertado.

No sé qué formas hay para automatizar esto, por eso se me ocurrió el hacerlo con un trigger, ya que con un campo calculado no veo como hacerlo.

Saludos y gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Error al ejecutar Trigger

Publicado por anonymous (19 intervenciones) el 26/12/2020 14:12:35
Podrías utilizar una tabla de control para ello, similar a como maneja Oracle las secuencias, y esa tabla la proteges y obtienes el máximo de allá
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 8
Ha disminuido su posición en 3 puestos en SQL Server (en relación al último mes)
Gráfica de SQL Server

Error al ejecutar Trigger

Publicado por Manuel (3 intervenciones) el 26/12/2020 18:30:32
Agradezco tu ayuda enormemente, pero ya intenté realizarlo con una tabla auxiliar, pero para mi caso concreto y la casuística particular del software que usamos no me funciona como debería (tampoco me voy a parar en excesivos detalles que alargaría esto innecesariamente).

La cuestión está en que la "unica salida que me queda" es automatizarlo con un campo autocalculado en función del proyecto, ya sea de forma directa o con un trigger.

¿Podrías revisar mi código a ver qué estoy haciendo mal o cómo crees que podría conseguir este resultado con un trigger?.

Muchísimas gracias de nuevo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar