Предотвратить вставку повторяющихся строк - PullRequest
0 голосов
/ 02 августа 2010

Я пытаюсь использовать оператор вставки SQL для переноса строк из таблицы в одной базе данных в таблицу в другой базе данных.Оператор работает до тех пор, пока я не добавлю уникальный индекс в таблицу назначения, и в этот момент я пытаюсь добиться того, чтобы оператор вставки мог исключить дубликаты.Вот что я должен работать:

INSERT INTO [MyDB].[dbo].[HPB] (
    [HPID],
    [BusinessID]
)
SELECT 
    PersonId = (SELECT ID FROM [MyDB].[dbo].[HP] WHERE PersonID = lPersonId),
    lBusinessId
FROM [MyOriginalDB].[dbo].[tblEmployment]
WHERE
    lPersonId in (SELECT PersonID FROM [MyDB].[dbo].[HP])
AND
    lBusinessId in (SELECT ID FROM [MyDB].[dbo].[Business])
AND 
   NOT EXISTS (SELECT * FROM [MyDB].[dbo].[HPB] WHERE 
     [HPID] = (SELECT ID FROM [MyDB].[dbo].[HP] WHERE PersonID = lPersonId) 
     AND [BusinessID] = lBusinessId)

Схема для таблицы HPB:

CREATE TABLE [dbo].[HPB](
   [ID] [int] IDENTITY(1,1) NOT NULL,
   [HPID] [int] NOT NULL,
   [BusinessID] [int] NOT NULL,
   CONSTRAINT [PK_HealthProfessionalBusiness] PRIMARY KEY CLUSTERED)

Уникальный индекс находится в [MyDB]. [Dbo]. [HPB]таблица для столбцов (HPID, BusinessID)

Когда я запускаю вставку, я получаю сообщение об ошибке вставки дублирующихся строк и не могу понять, почему приведенный ниже SQL не исключает дубликаты.

 NOT EXISTS (SELECT * FROM [MyDB].[dbo].[HPB] WHERE 
     [HPID] = (SELECT ID FROM [MyDB].[dbo].[HP] WHERE PersonID = lPersonId) 
     AND [BusinessID] = lBusinessId)

Ответы [ 2 ]

2 голосов
/ 02 августа 2010
Insert MyDB.dbo.HPB( HPID, BusinessID )  
Select HP.ID, E.IBusinessID  
From [MyOriginalDB].[dbo].[tblEmployment] As E
    Join [MyDB].[dbo].[HP] As HP
        On HP.PersonId = E.IPersonID
    Join [MyDB].[dbo].[Business] As B
        On B.ID = E.IBusinessID
    Left Join [MyDB].[dbo].[HPB] As HPB
        On HPB.BusinessID = E.IBusinessID
            And HPB.PersonID = E.IPersonId
Where HPB.ID Is Null
Group By HP.ID, E.IBusinessID
2 голосов
/ 02 августа 2010

Использование:

INSERT INTO [MyDB].[dbo].[HPB] 
  ([HPID], [BusinessID])
SELECT DISTINCT
       h.id,
       e.lbusinessid
  FROM [MyOriginalDB].[dbo].[tblEmployment] e
  JOIN [MyDB].[dbo].[HP] h ON h.personid = e.lpersonid
 WHERE e.lbusinessid in (SELECT ID FROM [MyDB].[dbo].[Business])
   AND NOT EXISTS (SELECT NULL 
                     FROM [MyDB].[dbo].[HPB] hb
                    WHERE hb.businessid = e.lbusinessid
                      AND hb.hpid = h.id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...