Ver Mensaje Individual
  #1 (permalink)  
Antiguo 02/03/2012, 18:33
samardj
 
Fecha de Ingreso: marzo-2009
Mensajes: 120
Antigüedad: 15 años, 1 mes
Puntos: 1
SQL server- Transac INSTEAD od update

al compilar el trigger no me bota error.

al tratar de actualizar un nombre con un valor vacío, me bota el error esperado, osea hasta ahí todo bien.

Pero cuando quiero actualizar el nombre con un valor normal , como por ejemplo 'carlos', me bota el siguiente error

"los valores de las filas actualizados no la convierten en única o alteran varias filas"

Debo aclarar que quiero despejar las dudas para fines didácticos, se que puedo usar un AFTER UPDATE y después un rollback, pero deseo saber por que este triger en particular me bota ese mensaje

Muchas gracias por la colaboracion.

acá el ejemplo.


Creación de la tabla, con un ID autoincremental, el cual deber ser único para cada registro

USE [prueba]
GO

/****** Object: Table [dbo].[empleados] Script Date: 03/02/2012 19:25:10 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[empleados](
[id] [int] IDENTITY(1,1) NOT NULL,
[nombre] [varchar](50) NULL,
[apellido] [varchar](50) NULL,
[sueldo] [numeric](18, 0) NULL
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO




y el triger mencionado.


USE prueba;
GO
IF OBJECT_ID ('gatilloup','TR') IS NOT NULL
DROP TRIGGER gatilloup;
GO

CREATE TRIGGER gatilloup ON prueba.dbo.empleados
INSTEAD OF UPDATE
AS

DECLARE @nombre nvarchar(50), @apellido nvarchar(50), @id int;

IF (SELECT nombre FROM inserted) = ''
BEGIN
RAISERROR ('No se puede actualziar a un nombre vacio.', 16, 1);
RETURN
END

ELSE
BEGIN
UPDATE prueba.dbo.empleados
SET nombre = I.nombre,
apellido = I.apellido
FROM prueba.dbo.empleados E, inserted I
WHERE E.id = I.id
RETURN
END


GO

Última edición por samardj; 02/03/2012 a las 18:41