How to check if value is inserted successfully or not?

前端 未结 4 776
栀梦
栀梦 2021-02-01 17:16

I have a procedure where I insert values into my table.

declare @fName varchar(50),@lName varchar(50),@check tinyint
INSERT INTO myTbl(fName,lName) values(@fName         


        
相关标签:
4条回答
  • 2021-02-01 17:45

    you can use @@rowcount after insert table

    DECLARE @check int

    INSERT INTO Employees (Name,Email,Phone,[Address]) VALUES('Test','test@mail.com','','')

    if(@@ROWCOUNT>0) SET @check=1

    SELECT @check;

    0 讨论(0)
  • You can use @@ROWCOUNT server variable immediately after the insert query to check number of affected rows by the insert operation.

    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 
    

    For your requirement, you could use a Case statement(as per comment):

    --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
    
    0 讨论(0)
  • 2021-02-01 18:01

    In SQL-Sever you can use OUTPUT clause to check if values are inserted successfully. By following query

     
    declare @fName varchar(50),@lName varchar(50)
    
    INSERT INTO myTbl(fName,lName) OUTPUT inserted.* values(@fName,@lName)  ;
    
     

    IF the values are inserted it will show output of inserted values. You can also store these values into new table.

    0 讨论(0)
  • 2021-02-01 18:04

    You need to use @@ROWCOUNT

    It returns the number of rows affected by the last statement. If the number of rows is more than 2 billion, use ROWCOUNT_BIG.

    @@ROWCOUNT is both scope and connection safe.

    In fact, it reads only the last statement row count for that connection and scope.

    It’s safe to use @@ROWCOUNT in SQL Server even when there is a trigger on the base table. The trigger will not skew your results; you’ll get what you expect. @@ROWCOUNT works correctly even when NOCOUNT is set.

    so you query should be:

    declare @fName varchar(50), @lName varchar(50), @check tinyint = 0
    ...
    INSERT INTO myTbl(fName,lName) values(@fName,@lName)
    if  @@ROWCOUNT>0   
      set @check = 1
    
    0 讨论(0)
提交回复
热议问题