I'm trying to figure out why you want to go through the hassle of dealing with triggers. Just reformat your insert so that it takes care of you condition automatically.
I've got to assume there's some additional fields in the CCCMTRL table, one being price date change as you don't provide a condition that the price always increases or decreases, so I'm assuming that this is tracked by some sort of date field, which I've called DATEFIELD in my example query below.
Basically, this query will identify if the *new *price no longer matches the most recent old price in the CCCMTRL table (the ordering is performed by the ROW_NUMBER() windowing function). If you have any mismatches, they are inserted into the CCCMTRL table:
--Optionally insert DATEFIELD if this is not tracked via default constraint
INSERT INTO CCCMTRL(MTRL,COMPANY,OLDPRICE,NEWPRICE)
SELECT
t_window.MTRL,
t_window.COMPANY,
t_window.OLD_PRICE,
t_window.NEW_PRICE
FROM (
SELECT
MTRL,
COMPANY,
OLD.PRICE AS OLD_PRICE,
NEW.PRICE AS NEW_PRICE,
ROW_NUMBER() (PARTITION BY OLD.MTRL, OLD.COMPANY ORDER BY OLD.DATEFIELD DESC) AS RowNum
FROM CCCMTRL OLD LEFT OUTER JOIN CCCMTRL_NEW NEW
ON OLD.MTRL = NEW.MTRL
AND OLD.COMPANY = NEW.COMPANY
WHERE OLD.PRICE <> NEW.PRICE
) t_window
WHERE RowNum = 1
Below is a quick example query that effectively shows what I'm talking about with a working example. Hopefully this fixes your problem without cluttering up your DB with triggers.
SELECT COL1, COL2, DT
FROM
(
SELECT COL1, COL2, DT,
-- Create Windows Based On Colums and Assign Number based on Age of records
ROW_NUMBER() OVER (PARTITION BY COL1, COL2 ORDER BY DT DESC) AS RowNum
FROM
(
-- Row will be filtered out as it's the oldest of Liquids/Blues
SELECT 'Liquid' AS COL1, 'Blue' AS COL2, GETDATE() - 1 AS DT
UNION
SELECT 'Liquid', 'Blue', GETDATE()
UNION
SELECT 'Liquid', 'Red', GETDATE()
UNION
-- Row will be filtered out as it's the oldest of Solid/Greens
SELECT 'Solid', 'Green', GETDATE()
UNION
SELECT 'Solid', 'Green', GETDATE() + 2
) t_example
) t_windowed
WHERE RowNum = 1