2012-06-04 58 views
2

本主題與Copy missing rows from one table to another in sql server with stored procedure有關,但是現在問題稍微複雜一些。使用多列主鍵將缺少的行從一個表複製到另一個表

我必須在不同的數據庫(在同一臺服務器上)是相同的表。我需要將左數據庫表中的數據行傳輸到正確的數據庫表,但我只想傳輸不在正確的數據庫表中的行。

我的表有四個主鍵,看到圖像

enter image description here

我想用這樣的

insert into [EXTERN_EPI6R2].[dbo].[tblBigTableReference] 
select * from [EXTERN].[dbo].[tblBigTableReference] 
where (
pkId not in (select pkId 
    from [EXTERN_EPI6R2].[dbo].[tblBigTableReference]) 
and PropertyName not in (select PropertyName 
    from [EXTERN_EPI6R2].[dbo].[tblBigTableReference]) 
and IsKey not in (select IsKey 
    from [EXTERN_EPI6R2].[dbo].[tblBigTableReference]) 
and [Index] not in (select [Index] 
    from [EXTERN_EPI6R2].[dbo].[tblBigTableReference]) 
) 

但是,這不會工作,因爲條件的堆疊是某種程度上是錯誤的。使用SQL Server 2008 R2

回答

3

您的查詢

林是不正確的,因爲你的各種條件,可以在不同的行匹配。

insert into [EXTERN_EPI6R2].[dbo].[tblBigTableReference] 
select * from [EXTERN].[dbo].[tblBigTableReference] AS s 
where NOT EXISTS 
(
    SELECT 1 FROM [EXTERN_EPI6R2].[dbo].[tblBigTableReference] AS d 
    WHERE d.pkId = s.pkId 
    AND d.PropertyName = s.PropertyName 
    AND d.IsKey = s.IsKey 
    AND d.[Index] = s.[Index] -- terrible column name 
); 

但這引出了一個問題 - 爲什麼這些列中的所有四列都是鍵的一部分? pkId不夠?如果不是,它肯定有一個奇怪和不正確的名字。

相關問題