Sql-Server

如何從不同的模式複製文章?

  • December 22, 2018

來自sp_addarticle (Transact-SQL)

我得到了一個如何將文章添加到出版物的範例。

這會將表添加dbo.Product到發布中AdvWorksProductTran

DECLARE @publication    AS sysname;
DECLARE @table AS sysname;
DECLARE @filterclause AS nvarchar(500);
DECLARE @filtername AS nvarchar(386);
DECLARE @schemaowner AS sysname;
SET @publication = N'AdvWorksProductTran'; 
SET @table = N'Product';
SET @filterclause = N'[DiscontinuedDate] IS NULL'; 
SET @filtername = N'filter_out_discontinued';
SET @schemaowner = N'Production';

-- Add a horizontally and vertically filtered article for the Product table.
-- Manually set @schema_option to ensure that the Production schema 
-- is generated at the Subscriber (0x8000000).
EXEC sp_addarticle 
   @publication = @publication, 
   @article = @table, 
   @source_object = @table,
   @source_owner = @schemaowner, 
   @schema_option = 0x80030F3,
   @vertical_partition = N'true', 
   @type = N'logbased',
   @filter_clause = @filterclause;

如果我還有來自不同的以下表格schemas要添加到此出版物中,我該怎麼辦?

我想將這兩個表添加到發布中,我該如何使用sp_addarticle呢?

  1. my_schema01.Product
  2. my_schema02.Product

對此的元答案是使用 SSMS 發布文章並檢查複製腳本。答案是 sp_addarticle 的 @source_owner 參數具有目標架構。這可以追溯到 SQL 2005 中模式/所有者分離之前,其中對象所有者和模式是同一事物。

您列出使用的腳本不會發布 dbo.Product,它會發布 Production.Product

根據我的經驗,“文章”名稱必須是唯一值,無論您是否有重複的對象名稱但不同的所有者(模式)。文章名稱不必是對象的名稱。使用此方案分析 UI 中添加的文章時,您會注意到它會在對象名稱的末尾附加一個數值,使文章名稱為“table1”、“table2”等。

我的解決方案是將架構名稱附加到對象名稱(“table_dbo”、“table_dba”等)作為文章名稱。您顯然必須將 source_object 和 source_owner 作為正確值傳遞,與目標值相同。

引用自:https://dba.stackexchange.com/questions/192929