記事フィルタと削除操作を使用すると、トランザクションレプリケーションに問題があります。新しいデータをパブリッシャに挿入すると、指定したフィルタに一致するすべてのデータがサブスクライバに挿入されます。すべて正常に動作します。サイト運営者から一部のデータを削除すると、指定したフィルタに一致するすべてのデータがサブスクライバから削除されず、理由がわかりません。 - 出版社(マイクロソフトのSQL Server 2012の)、 B - 販売代理店(Microsoft SQL Serverの2012)、 C - 加入者(のMicrosoft SQL Server 2012の) A:記事フィルタと削除操作を使用したトランザクションレプリケーション
は、私は3台のサーバを持っています。
パブリッシャーデータベースには6つのテーブルがあります。各テーブルには主キーを持っており、そのうちのいくつかは、添付の写真のように外部キーがあります。
をのみ、最初のメーカー(メーカーID = 1)私は、加入者に、パブリッシャからレプリケートするデータ、 IパブリッシャCarPartsテーブルに指定されたフィルタ(メーカーID = 1)を満たし、部品表またはPartDetailsテーブルのすべてのデータを新しいデータを挿入する
SELECT <published_columns> FROM [dbo].[Manufacturer]
WHERE [dbo].[Manufacturer].ID IN (Select M.ID from [dbo].[Manufacturer] AS M where M.ID = 1)
SELECT <published_columns> FROM [dbo].[Catalog]
WHERE [dbo].[Catalog].ID IN (Select C.ID from [dbo].[Catalog] AS C
INNER JOIN [dbo].[Manufacturer] AS M ON M.ID = C.MID where M.ID = 1)
SELECT <published_columns> FROM [dbo].[Cars]
WHERE ID IN (Select CA.ID from [dbo].[Cars] AS CA
INNER JOIN [dbo].[Catalog] AS C ON C.ID = CA.CID
INNER JOIN [dbo].[Manufacturer] AS M ON M.ID = C.MID where M.ID = 1)
SELECT <published_columns> FROM [dbo].[CarParts]
WHERE ID IN (Select CP.ID from [dbo].[CarParts] AS CP
INNER JOIN [dbo].[Cars] AS CA ON CA.ID = CP.CarID
INNER JOIN [dbo].[Catalog] AS C ON C.ID = CA.CID
INNER JOIN [dbo].[Manufacturer] AS M ON M.ID = C.MID where M.ID = 1)
SELECT <published_columns> FROM [dbo].[Parts]
WHERE ID IN (Select P.ID from [dbo].[Parts] AS P
INNER JOIN [dbo].[CarParts] AS CP ON CP.PID = P.ID
INNER JOIN [dbo].[Cars] AS CA ON CA.ID = CP.CarID
INNER JOIN [dbo].[Catalog] AS C ON C.ID = CA.CID
INNER JOIN [dbo].[Manufacturer] AS M ON M.ID = C.MID where M.ID = 1)
SELECT <published_columns> FROM [dbo].[PartDetails]
WHERE ID IN (Select PD.ID from [dbo].[PartDetails] AS PD
INNER JOIN [dbo].[Parts] AS P ON P.ID = PD.PartID
INNER JOIN [dbo].[CarParts] AS CP ON CP.PID = P.ID
INNER JOIN [dbo].[Cars] AS CA ON CA.ID = CP.CarID
INNER JOIN [dbo].[Catalog] AS C ON C.ID = CA.CID
INNER JOIN [dbo].[Manufacturer] AS M ON M.ID = C.MID where M.ID = 1)
加入者に挿入されている:私はこれらのフィルタを使用します。
パブリッシャーのCarPartsテーブルからデータを削除すると、指定したフィルター(製造元ID = 1)を満たすすべてのデータがサブスクライバから削除されるわけではなく、CarPartsテーブルのデータのみが削除されますテーブルとPartDetailsテーブル。
同じフィルタが挿入操作と削除操作に使用されます。どこに問題がありますか?たぶんMicrosoft SQL Server 2012のバグですか?
これまでこれまでに機能しましたか?そのようなフィルタを使用してトランザクションをレプリケートする場合、クエリを実行する前に満足する必要はありませんか?私。 CarPartsテーブルから削除すると 'INNER JOIN'から除外されるため、削除することはできません。 – Shaneis