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         
        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;
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
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.
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