SQL Server - saber si se eliminaron los registros..?

   
Vista:
Imágen de perfil de Leonardo Daniel A.

saber si se eliminaron los registros..?

Publicado por Leonardo Daniel A. (38 intervenciones) el 29/03/2017 06:27:35
Hola a todos, estoy desarrollando un sistema con SQL Server como B.D. y para Agregar, Actualizar, Eliminar, y consultar, utilizo Stored Procedures ya que es mas facil que embeber el codigo dentro de la aplicacion..

bueno el asuneto es que necesitaba saber si la sentencia se habia ejecutado con exito.. y buscando encontre
@@rowcount y fue mi solucion... pero no funciona cuando utilizo la sentencia DELETE

delete from miTabla where id = @id;

if @@rowcount > 0
@mensaje = "Se elimino correctamente"
else
@mensaje = "No se pudo eliminar"


@mensaje es un parametro de salida que informa a mi aplicacion si se proceso correctamente... pero como dije con DELETE no funciona...tampoco funciona apagar el rowcount como lei en algunas paginas
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
Imágen de perfil de kip

saber si se eliminaron los registros..?

Publicado por kip (2 intervenciones) el 29/03/2017 06:49:33
Hola, puedes colocar el codigo de todo el STORED PROCEDURE donde no te funciona @@ROWCOUNT?

Quizas algo se te este escapando y por eso la funcion no te retorna las filas afectadas....
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
Imágen de perfil de Leonardo Daniel A.

saber si se eliminaron los registros..?

Publicado por Leonardo Daniel A. (38 intervenciones) el 29/03/2017 07:47:45
Hola, pues eh investigado mucho y al parecer @@rowcount no funciona con DELETE


1
2
3
4
5
6
7
8
9
10
11
12
13
ALTER PROCEDURE [dbo].[Eliminar_Marca]
@Id int,
@Mensaje VARCHAR(100) out
AS
BEGIN
     DELETE FROM marcas WHERE id_marca = @Id;
 
     IF @@ROWCOUNT > 0
          set @Mensaje = 'Se elimino correctamente'
     ELSE
          set @Mensaje = 'No se pudo eliminr'
 
END
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
Imágen de perfil de kip

saber si se eliminaron los registros..?

Publicado por kip (2 intervenciones) el 29/03/2017 15:01:28
No entiendo porque dices que no funciona, en la misma documentacion lo mencionan como un metodo para obtener las filas affectadas:

Use el @@ROWCOUNT eliminado de función para devolver el número de filas a la aplicación cliente. Para obtener más información, consulte @@ROWCOUNT (Transact-SQL).
https://msdn.microsoft.com/es-es/library/ms189835.aspx

Tal como dices tambien he leido que en la mayoria de los casos recomiendan el uso de SET NOCOUNT OFF, aunque segun la documentacion no es necesaria esta sentencia:

El @@ROWCOUNT función se actualiza incluso cuando SET NOCOUNT es ON.

https://msdn.microsoft.com/es-es/library/ms189837.aspx

Ahora bien, indague un poco y lei esta respuesta contraria a la mayoria que recomienda darle OFF:

According to MSDN @@ROWCOUNT function is updated even when SET NOCOUNT is ON as SET NOCOUNT only affects the message you get after the the execution.

So if you're trying to work with the results of @@ROWCOUNT from, for example, ADO.NET then SET NOCOUNT ON should definitely help.

http://stackoverflow.com/questions/174143/counting-the-number-of-deleted-rows-in-a-sql-server-stored-procedure/174178#174178

Intenta ahora con SET NOCOUNT ON..... no estoy seguro que funcione pero intentalo...

Por cierto no se desde donde pruebas el procedimiento pero te diria que no lo pruebes dentro de la app a ver si funciona fuera de esta.....

Nos cuentas como vas....
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
Imágen de perfil de Isaias

saber si se eliminaron los registros..?

Publicado por Isaias (3723 intervenciones) el 29/03/2017 18:39:00
Funciona perfectamente:

1
2
3
4
5
6
7
8
9
10
11
12
create table #prueba (IdPrueba int)
 
insert into #prueba values(1),
(2),
(3),
(4),
(5)
 
declare @registrosafectados int = 0
delete #prueba where IdPrueba = 3
set @registrosafectados = @@ROWCOUNT
select 'registros afectados', @registrosafectados

(No column name) (No column name)
registros afectados 1
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
Imágen de perfil de Leonardo Daniel A.

saber si se eliminaron los registros..?

Publicado por Leonardo Daniel A. (38 intervenciones) el 05/04/2017 07:01:49
Hola gracias, no se que seria, reinstale sqlserver local db y ya funciono
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
Revisar política de publicidad