Хочу слить две таблицы Cars и CarsDeleted. В Cars PRIMARY KEY - единственное поле CarNumber
Пишу:
INSERT INTO Cars ([CarNumber], <список полей>)
SELECT [CarNumber], <список полей>
FROM CarsDeleted (HOLDLOCK TABLOCKX)
WHERE CarNumber NOT IN (SELECT CarNumber FROM dbo.Cars (NOLOCK))
План:
|--Top(ROWCOUNT est 0)
|--Compute Scalar(DEFINE:([Expr1004]=setidentity([CarsDeleted].[ID], 453576654, 7, NULL)))
|--Merge Join(Right Anti Semi Join, MERGE:([Cars].[CarNumber])=([CarsDeleted].[CarNumber]), RESIDUAL:([CarsDeleted].[CarNumber]=[Cars].[CarNumber]))
|--Sort(ORDER BY:([Cars].[CarNumber] ASC))
| |--Index Scan(OBJECT:([CarData].[dbo].[Cars].[CarsFuelRpt]))
|--Sort(ORDER BY:([CarsDeleted].[CarNumber] ASC))
|--Nested Loops(Left Anti Semi Join, WHERE:([CarsDeleted].[CarNumber]=NULL))
|--Table Scan(OBJECT:([CarData].[dbo].[CarsDeleted]))
|--Row Count Spool
|--Top(1)
|--Index Scan(OBJECT:([CarData].[dbo].[Cars].[CarsFuelRpt]))
Получаю: Violation of PRIMARY KEY constraint 'Cars_PrimaryKey'. Cannot insert duplicate key in object 'Cars'.
Не понимаю за что :)
Замена на left join ничего не дает.