Inner cursor performance issues
Best practice is to do away with cursors. Both of them. There is always a better-performing solution.

If possible, reduce the problem to one that can be solved with sets instead of iteration.

But, if this nested iteration cannot be avoided, you will still get far better performance using table variables and WHILE loops instead of a cursor. For example:

DECLARE @outerData TABLE (outerID INT, outerColumn VARCHAR(50), PRIMARY KEY (outerID))
DECLARE @innerData TABLE (innerID INT, innerColumn VARCHAR(50), PRIMARY KEY (innerID))
DECLARE @currOuter INT
DECLARE @currInner INT

INSERT INTO @outerData
SELECT  EmployeeID, EmployeeName
FROM dbo.Employee

WHILE EXISTS (SELECT outerID FROM @outerData)
BEGIN
    SELECT @currOuter = TOP outerID FROM @outerData

    INSERT INTO @innerData
    SELECT SaleID, SaleDesc
    FROM EmployeeSales 
    WHERE EmployeeID = @outerID

    WHILE EXISTS (SELECT innerID FROM @innerData)
    BEGIN
        SELECT @currInner = TOP innerID FROM @innerData

        --Do work with inner data

        ...blah-de-blah...

        --Delete after work is finished
        DELETE FROM @innerData   WHERE innerID = @currInner
    END

    --Delete current outerID and empty the innerdata table 
    --to prepare to move to the next record

    DELETE FROM @outerData WHERE outerID = @currOuter
    DELETE FROM @innerData
END