Tabela INSERT lub UPDATE z innej tabeli z złożonym kluczem podstawowym

Szukam poprawnej składni i sposobu wykonania następujących bezpośrednio z SQL: insert or update (jeśli dane już istnieją wewnątrz)TableMain z danych zawartych wTableA z obydwoma mającymi ten sam złożony klucz podstawowy.

Obie tabele są zdefiniowane jako:

CREATE TABLE TableA (
[TID0] [int] NOT NULL,
[TID1] [int] NOT NULL,
[language] [nvarchar](2) NOT NULL,
[TID2] [nvarchar](200) NOT NULL,
[text] [nvarchar](max) NULL,
[updatedOn] [datetime] NOT NULL  DEFAULT (getdate())
PRIMARY KEY (
    [TID0],
    [TID1],
    [language],
    [TID2],
)
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

TableA będzie okresowo usuwany i wypełniany.

TableMain jako ta sama definicja, ale będzie zawierał znacznie więcej wierszy danych i potrzebuję wstawić nigdy nie widziane wartościTableA wTableMaini zaktualizuj już istniejące wiersze.

Użyłem tego rodzaju wstawki, ale nie wiem, jak obsługiwać aktualizację i złożone klucze podstawowe:

INSERT INTO TableMain 
    SELECT * FROM TableA

EDYCJA: używamSQL Server 9.00.5000

EDIT: inny sposób zainspirowany przez MERGE inaśladuj to

DECLARE @updatedIDs TABLE(
    [TID0] [int],
    [TID1] [int],
    [language] [nvarchar](2),
    [TID2] [nvarchar](200),
                PRIMARY KEY ([TID0], [TID1], [language], [TID2])  -- as stated by Nikola Markovinović above, thanks
);

-- First update records 
update TableMain 
   set [text]      = source.[text], 
       [updatedOn] = source.[updatedOn] 
       OUTPUT
         inserted.[TID0]
         inserted.[TID1]
         inserted.[language]
         inserted.[TID2]
       INTO @updatedIDs
  from 
       TableMain AS main
       , TableA AS source 
  WHERE    
   TableMain.[TID0]         = source.[TID0] 
   and TableMain.[TID1]     = source.[TID1] 
   and TableMain.[language] = source.[language] 
   and TableMain.[TID2]     = source.[TID2] 

-- And then insert 

insert into TableMain
select *
  from TableA AS source 
 where not exists 
       ( 
      select 1
        from @updatedIDs AS i
       where i.[TID0]     = source.[TID0] 
         and i.[TID1]     = source.[TID1] 
         and i.[language] = source.[language] 
         and i.[TID2]     = source.[TID2] 
       )

questionAnswers(3)

yourAnswerToTheQuestion