共用方式為


sp_repladdcolumn (Transact-SQL)

將資料行加入已發行的現有資料表發行項中。它可讓您將新資料行加入發行這份資料表的所有發行者中,或只將資料行加入發行這份資料表的特定發行集。這個預存程序執行於發行集資料庫的發行者端。

ms189464.note(zh-tw,SQL.90).gif重要事項:
這個預存程序已被取代,支援它的目的,主要是為了與舊版相容。它只應搭配 Microsoft SQL Server 2000 發行者和 SQL Server 2000 重新發行訂閱者使用。

主題連結圖示Transact-SQL 語法慣例

語法

sp_repladdcolumn [ @source_object = ] 'source_object', [ @column = ] 'column' ]
    [ , [ @typetext = ] 'typetext' ]
    [ , [ @publication_to_add = ] 'publication_to_add' ]
    [ , [ @from_agent = ] from_agent ]
    [ , [ @schema_change_script = ] 'schema_change_script' ]
    [ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
    [ , [ @force_reinit_subscription = ] force_reinit_subscription ]

引數

  • [ @source_object=] 'source_object'
    這是包含要加入之新資料行的資料表發行項名稱。source_objectnvarchar(358),沒有預設值
  • [ @column=] 'column'
    這是複寫要加入之資料表中的資料行名稱。columnsysname,沒有預設值。
  • [ @typetext=] 'typetext'
    這是要加入之資料行的定義。typetextnvarchar(3000),沒有預設值例如,如果加入 order_filled 資料行,且它是單一字元欄位,不是 NULL,預設值是 Norder_filled 就是 column 參數,資料行的定義 (char(1) NOT NULL CONSTRAINT constraint_name DEFAULT 'N') 則是 typetext 參數值。
  • [ @publication_to_add=] 'publication_to_add'
    這是新資料行要加入其中的發行集名稱。publication_to_addnvarchar(4000),預設值是 ALL。如果是 ALL,則所有包含這份資料表的發行集都會受到影響。如果指定了 publication_to_add,則只有這個發行集會加入新資料行。
  • [ @from_agent= ] from_agent
    預存程序是否由複寫代理程式執行。from_agentint,預設值是 0,當複寫代理程式執行這個預存程序時,會使用 1 值,其他情況應該使用預設值 0
  • [ @schema_change_script=] 'schema_change_script'
    指定用來修改系統產生的自訂預存程序之 SQL Server 指令碼的名稱和路徑。schema_change_scriptnvarchar(4000),預設值是 NULL。複寫可讓使用者自訂的自訂預存程序,取代交易式複寫所用的一或多個預設程序。schema_change_script 是在利用 sp_repladdcolumn 來變更複寫的資料表發行項的結構描述之後執行,且可用來執行下列動作之一:

    • 如果自動重新產生自訂預存程序,就可以利用 schema_change_script 來卸除這些自訂預存程序,用支援新結構描述的使用者自訂的自訂預存程序來取代它們。
    • 如果並未自動重新產生自訂預存程序,就可以利用 schema_change_script 來重新產生這些自訂預存程序,或建立使用者自訂的自訂預存程序。
  • [ @force_invalidate_snapshot = ] force_invalidate_snapshot
    啟用或停用使快照集失效的能力。force_invalidate_snapshotbit,預設值是 1

    1 指定發行項的變更可能使快照集失效,若是如此,1 值會提供將出現之新快照集的權限。

    0 指定發行項的變更不會使快照集失效。

  • [ @force_reinit_subscription = ] force_reinit_subscription
    啟用或停用重新初始化訂閱的能力。force_reinit_subscriptionbit,預設值是 0

    0 指定發行項的變更不會使訂閱重新初始化。

    1 指定發行項的變更可能使訂閱重新初始化,若是如此,1 值會提供將進行的訂閱重新初始化的權限。

傳回碼值

0 (成功) 或 1 (失敗)

備註

sp_repladdcolumn 已被取代,提供這個項目的目的,只是為了與舊版相容。您應該針對發行的資料表來執行資料定義語言 (DDL) 命令,以便將資料行加入複寫的資料表發行項中。只要已啟用 DDL 複寫,複寫便會自動複寫這些 DDL 命令。如需詳細資訊,請參閱<對發行集資料庫進行結構描述變更>。

當您從執行於舊版 SQL Server 2000 訂閱者的重新發行訂閱者傳播 DDL 變更時,您仍然需要 sp_repladdcolumn

sp_repladdcolumn 適用於所有複寫類型。

當使用 sp_repladdcolumn 時,如果在屬於使用 Data Transformation Services (DTS) 封裝之發行集的發行項上進行結構描述變更,結構描述變更不會傳播到訂閱者,也不會在訂閱者重新產生 INSERT/UPDATE/DELETE 的自訂程序。使用者必須以手動方式來重新產生 DTS 封裝,並在訂閱者端進行對應的結構描述變更。如果未套用結構描述更新,散發代理程式可能無法套用後續的修正。在進行結構描述變更之前,請確定沒有要傳遞的暫止交易。

當您將不具決定性之函數的預設值 (如 'datetime not null default getdate()') 指派給 typetext 時,加入新資料行之後,可能會出現非聚合的情況,因為在訂閱者端執行這個函數,才能將預設值載入資料行。

如果是字元模式發行集,便會將時間戳記資料行和計算資料行篩選掉。如果利用 sp_repladdcolumn 來加入時間戳記資料行和計算資料行,這些發行集的訂閱不會接收這個新資料行。

ms189464.note(zh-tw,SQL.90).gif重要事項:
您應該在執行 sp_repladdcolumn 之後,才執行發行集資料庫的備份。如果沒有完成這個動作,在還原發行集資料庫之後,合併可能會失敗。

權限

只有系統管理員 (sysadmin) 固定伺服器角色和 db_owner 固定資料庫角色的成員,才能夠執行 sp_repladdcolumn

請參閱

參考

系統預存程序 (Transact-SQL)

其他資源

SQL Server 2005 複寫中已被取代的功能

說明及資訊

取得 SQL Server 2005 協助