Sql-Server
如何從不同的模式複製文章?
來自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呢?
- my_schema01.Product
- 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 作為正確值傳遞,與目標值相同。