As Olaf said, there are several problems with what you posted.
First, getdate() is only accurate to 3ms. So basing your problem on the result of getdate() is not really valid. If you want more accuracy you must use datetime2(7) data type.
Second, your code does not stop on error. If you call a stored proc from an outer proc, and the called proc fails, it does not terminate the master proc. If you want that to happen you need to trap the error.
DROP TABLE IF EXISTS dbo.test;
GO
CREATE TABLE dbo.test (name varchar(50), createdate datetime2(7));
GO
CREATE UNIQUE INDEX uidx_test ON dbo.test (name, createdate);
GO
CREATE PROC dbo.testinsert (@pname varchar(50), @pcreatedate datetime2(7))
AS
BEGIN
INSERT INTO dbo.test values (@pname, @pcreatedate)
END
GO
CREATE PROC dbo.testmaster
AS
BEGIN
BEGIN TRY
DECLARE @v datetime2(7);
SET @v = SYSDATETIME();
EXEC dbo.testinsert 'test1',@v;
EXEC dbo.testinsert 'test1',@v;
SET @v = SYSDATETIME();
EXEC dbo.testinsert 'test1',@v;
EXEC dbo.testinsert 'test3',@v;
END TRY
BEGIN CATCH
THROW;
END CATCH
END
GO
EXEC dbo.testmaster;
PS. Please do not post screen shots. You can use the icon on the top bar to post code snippets.