sql - isdate - ¿Cómo comprobar si el valor se inserta con éxito o no?
title html (3)
Tengo un procedimiento donde inserto valores en mi tabla.
declare @fName varchar(50),@lName varchar(50),@check tinyint
INSERT INTO myTbl(fName,lName) values(@fName,@lName)
EDITADO:
Ahora quiero comprobar si se insertó correctamente establecer @check = 0 sino @check = 1
En SQL-Sever puede usar la cláusula OUTPUT para verificar si los valores se han insertado correctamente. Siguiendo la consulta
declare @fName varchar(50),@lName varchar(50)
INSERT INTO myTbl(fName,lName) OUTPUT inserted.* values(@fName,@lName) ;
SI se insertan los valores, se mostrará la salida de los valores insertados. También puede almacenar estos valores en la nueva tabla.
Necesitas usar @@ROWCOUNT
Devuelve el número de filas afectadas por la última instrucción. Si el número de filas es más de 2 mil millones, use ROWCOUNT_BIG
.
@@ ROWCOUNT es seguro tanto al alcance como a la conexión.
De hecho, solo lee el último recuento de filas de la declaración para esa conexión y alcance.
Es seguro usar @@ ROWCOUNT en SQL Server incluso cuando hay un disparador en la tabla base. El disparador no sesgará tus resultados; obtendrás lo que esperas @@ ROWCOUNT funciona correctamente incluso cuando NOCOUNT está configurado.
por lo que la consulta debe ser:
declare @fName varchar(50), @lName varchar(50), @check tinyint = 0
...
INSERT INTO myTbl(fName,lName) values(@fName,@lName)
if @@ROWCOUNT>0
set @check = 1
Puede usar la variable de servidor @@ROWCOUNT
inmediatamente después de la consulta de inserción para verificar el número de filas afectadas por la operación de inserción.
declare @fName varchar(50) = ''Abcd'',
@lName varchar(50) = ''Efgh''
INSERT INTO myTbl(fName,lName) values(@fName,@lName)
PRINT @@ROWCOUNT --> 0- means no rows affected/nothing inserted
--> 1- means your row has been inserted successfully
Para su requerimiento, puede usar una declaración del Case
(según el comentario):
--If you need @check as a bit type please change Int to bit
DECLARE @check Int = CASE WHEN @@ROWCOUNT = 0 THEN 1 ELSE 0 END