tag isdate example body attribute sql sql-server

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