You should always use full schema.tablename. Also, it is possible your table name has a special char in it.
CREATE OR ALTER PROCEDURE SP_TEST_DELETE
@Top VARCHAR(10) = '3'
AS BEGIN
DECLARE @Name_Of_Table NVARCHAR(128), @Table_Schema NVARCHAR(128)
DECLARE @Delete_STR VARCHAR(MAX)
DECLARE Cursor_DELETE CURSOR FOR
SELECT schema_name(t.schema_id) as [table_schema],
t.name AS [table_name]
FROM sys.tables t
WHERE schema_name(t.schema_id) = 'DBO' AND t.name like '%Emp_tmp%'
OPEN Cursor_DELETE
FETCH NEXT FROM Cursor_DELETE INTO @Table_Schema,@Name_Of_Table
PRINT 'We are inside the corsur, get:' + @Name_Of_Table
WHILE @@FETCH_STATUS = 0 BEGIN
SET @Delete_STR=N'
;WITH CTE AS(
SELECT *,DENSE_RANK()OVER(ORDER BY Load_Skey DESC) RNum
FROM '+QUOTENAME(@Table_Schema) + '.' + QUOTENAME(@Name_Of_Table)+'
)
DELETE FROM CTE
WHERE RNum > '+@Top+''
PRINT @Delete_STR
--EXEC (@Delete_STR)
FETCH NEXT FROM Cursor_DELETE INTO @Table_Schema,@Name_Of_Table
END
CLOSE Cursor_DELETE
DEALLOCATE Cursor_DELETE
END