Note! No checks are done if transactions are on the stock items!
--call this: EXEC _as_DeleteAllDuplicateStock
DELETE DUPLICATES - ALL
--EXEC _as_DeleteAllDuplicateStock CREATE PROCEDURE _as_DeleteAllDuplicateStock AS BEGIN DECLARE @ItemCode varchar(100) DECLARE MyCursor CURSOR FORWARD_ONLY FOR select Code FROm StkItem group by Code having count(*) > 1 OPEN MyCursor FETCH NEXT FROM MyCursor INTO @ItemCode WHILE @@FETCH_STATUS = 0 BEGIN EXEC _as_DeleteDuplicateStockItem @ItemCode FETCH NEXT FROM MyCursor INTO @ItemCode END CLOSE MyCursor DEALLOCATE MyCursor END
SQL - Delete Duplicate Stock Item
CREATE PROCEDURE _as_DeleteDuplicateStockItem @ItemCode as varchar(100) AS BEGIN DECLARE @stockID int if exists (SELECT * FROM StkItem WHERE Code = @ItemCode GROUP BY Code HAVING COUNT(*) > 1) BEGIN SELECT @stockID = (SELECT TOP 1 StockLink FROM StkItem WHERE Code = @ItemCode) DELETE FROM StkItem WHERE StockLink = @stockID; DELETE FROM WhseStk WHERE WhseStk.WHStockLink = @stockID; PRINT 'Deleted item ' + @ItemCode + ' with id ' + cast(@stockid as varchar(100)); END ELSE BEGIN PRINT 'DID NOT DELETE item ' + @ItemCode ; END END