none
不同欄位名稱的Replication RRS feed

  • 問題

  •  

    Deal all:

     

    大家好

    目前我有個replication的需求,想了很多方法都會失敗

    所以想問問看大家是否這樣的replication可行?

     

    我有兩個SQL Server (皆為Microsoft SQL Server 2000,SP4)

    ServerA為發行端,ServerB為訂閱者

    ServerA中有一tableA, tableA中有幾個欄位被挑選要複寫至ServerB內資料庫的目的tableB

    但tableA有一個欄位名稱(EXT)必須要複寫到tableB的欄位名稱(EXTNO)內

     

    大概下下面這樣

                 TableA                   TableB   

        

         aaa                        aaa

         bbb                        bbb

         EXT                       EXTNO

         ccc                        ccc

     

    目前試過的方法有更改複寫時產生的 SP,跟初始化產生快照,接著再更改欄位名稱,再補其他的欄位

    都不行,不知道其他前輩是否有遇到類似的要求,或是有其他的方法,先謝謝各位的協助了.

     

     

     

     

     

    2007年10月17日 下午 12:43

解答

  • Hello, Norick,

     

    您必須先要修改sp_MSins_repl, sp_MSins_repl, sp_MSdel_repl, 將對應的欄位名稱改為您所需要的.

     

    舉個例子:

    測試步驟:

     

    1.    建立測試用發行端資料庫與資料表

    create database SRT071012811785_Pub

    go

    use SRT071012811785_Pub

    go

    create table repl

    (col1 int primary key, col2 varchar(10), col3 varchar(10))

    go

     

    2.    建立目的端的資料庫與資料表, 並且讓第二個欄位的名稱與來源不相同

    create database SRT071012811785_Sub

    go

    use SRT071012811785_Sub

    go

    create table repl

    (col1 int primary key, colA varchar(10), col3 varchar(10))

    go

     

    3.    您必須先要修改sp_MSins_repl, sp_MSins_repl, sp_MSdel_repl, 將對應的欄位名稱改為您所需要的. 在我的例子中, 我分別改為MyInsert, MyUpdate, MyDelete, 並且建立好放在目的資料庫下. 下列為MyInsert的範例.

    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[MyInsert]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)

    drop procedure [dbo].[MyInsert]

    GO

     

    SET QUOTED_IDENTIFIER ON

    GO

    SET ANSI_NULLS ON

    GO

     

    create procedure "MyInsert" @c1 int,@c2 varchar(10),@c3 varchar(10)

    AS

    BEGIN

     

     

    insert into "repl"( "col1", "colA", "col3" )

     

    values ( @c1, @c2, @c3 )

     

     

     

    Best regards,

    Colin Lin

    微軟技術支援中心

    2007年11月16日 上午 02:28