sp_repladdcolumn (Transact-SQL)

Fügt eine Spalte zu einem vorhandenen Tabellenartikel hinzu, der veröffentlicht worden ist. Dadurch kann die neue Spalte zu allen Verlegern hinzugefügt werden, die diese Tabelle veröffentlichen, oder die Spalte kann ausschließlich zu einer bestimmten Veröffentlichung hinzugefügt werden, die die Tabelle veröffentlicht. Diese gespeicherte Prozedur wird beim Verleger mit der Veröffentlichungsdatenbank ausgeführt.

Wichtiger HinweisWichtig

Die gespeicherte Prozedur ist als veraltet markiert und wird hauptsächlich zum Sicherstellen der Abwärtskompatibilität unterstützt. Sie sollte nur mit Microsoft SQL Server 2000-Verlegern und SQL Server 2000-Wiederveröffentlichungsabonnenten verwendet werden. Diese Prozedur sollte nicht für Spalten mit Datentypen verwendet werden, die in SQL Server 2005 oder SQL Server 2008 eingeführt wurden.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

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 ]

Argumente

  • [ @source_object =] 'source_object'
    Der Name des Tabellenartikels, der die neue hinzuzufügende Spalte enthält. source_object ist vom Datentyp nvarchar(358 und hat keinen Standardwert.

  • [ @column =] 'column'
    Der Name der Spalte in der Tabelle, die für die Replikation hinzugefügt werden soll. column ist vom Datentyp sysname und hat keinen Standardwert.

  • [ @typetext=\] 'typetext'
    Die Definition der Spalte, die hinzugefügt wird. typetext ist vom Datentyp nvarchar(3000) und hat keinen Standardwert. Wenn beispielsweise die order_filled-Spalte hinzugefügt wird und diese ein Feld mit einem einzelnen Zeichen darstellt, das NULL nicht zulässt und den Standardwert N aufweist, dann ist order_filled der column-Parameter, während die Definition der Spalte, char(1) NOT NULL CONSTRAINT constraint_name DEFAULT 'N', den typetext-Parameterwert darstellt.

  • [ @publication_to_add=\] 'publication_to_add'
    Der Name der Veröffentlichung, der die neue Spalte hinzugefügt werden soll. publication_to_add ist vom Datentyp nvarchar(4000) und hat den Standardwert ALL. Ist die Einstellung ALL, sind alle Veröffentlichungen betroffen, die diese Tabelle enthalten. Wenn publication_to_add angegeben wird, wird nur dieser Veröffentlichung die neue Spalte hinzugefügt.

  • [ @from_agent= ] from_agent
    Gibt an, ob die gespeicherte Prozedur von einem Replikations-Agent ausgeführt wird. from_agent ist vom Datentyp int und hat den Standardwert 0. Der Wert 1 wird verwendet, wenn die gespeicherte Prozedur von einem Replikations-Agent ausgeführt wird. In allen anderen Fällen muss der Standardwert 0 verwendet werden.

  • [ @schema_change_script =] 'schema_change_script'
    Gibt den Namen und Pfad eines SQL Server-Skripts an, das zum Ändern der systemgenerierten benutzerdefinierten gespeicherten Prozeduren verwendet wird. schema_change_script ist vom Datentyp nvarchar(4000) und hat den Standardwert NULL. Bei der Replikation können Standardprozeduren, die für die Transaktionsreplikation verwendet werden, durch von Benutzern erstellte benutzerdefinierte gespeicherte Prozeduren ersetzt werden. schema_change_script wird ausgeführt, nachdem mithilfe von sp_repladdcolumn eine Schemaänderung an einem replizierten Tabellenartikel vorgenommen wurde. Das Skript kann für Folgendes verwendet werden:

    • Wenn benutzerdefinierte gespeicherte Prozeduren automatisch erneut generiert werden, können mithilfe von schema_change_script diese benutzerdefinierten gespeicherten Prozeduren gelöscht und durch von Benutzern erstellte, benutzerdefinierte gespeicherte Prozeduren ersetzt werden, die das neue Schema unterstützen.

    • Wenn benutzerdefinierte gespeicherte Prozeduren nicht automatisch erneut generiert werden, können mithilfe von schema_change_script diese benutzerdefinierten gespeicherten Prozeduren erneut generiert oder benutzerdefinierte gespeicherte Prozeduren erstellt werden.

  • [ @force_invalidate_snapshot = ] force_invalidate_snapshot
    Aktiviert oder deaktiviert die Möglichkeit, einen Snapshot für ungültig zu erklären. force_invalidate_snapshot ist vom Datentyp bit und hat den Standardwert 1.

    Der Wert 1 gibt an, dass Änderungen am Mergeartikel die Ungültigkeit des Snapshots bewirken können. Wenn dies zutrifft, wird mit dem Wert 1 die Berechtigung für das Auftreten des neuen Snapshots erteilt.

    Der Wert 0 gibt an, dass Änderungen am Artikel nicht bewirken, dass der Snapshot ungültig wird.

  • [ @force_reinit_subscription = ] force_reinit_subscription
    Aktiviert oder deaktiviert die Möglichkeit, ein Abonnement erneut zu initialisieren. force_reinit_subscription ist vom Datentyp bit und hat den Standardwert 0.

    Durch 0 wird angegeben, dass das Abonnement nicht durch Änderungen am Artikel erneut initialisiert werden kann.

    Der Wert 1 gibt an, dass Änderungen am Artikel bewirken können, dass das Abonnement erneut initialisiert wird. Wenn dies zutrifft, wird mit dem Wert 1 die Berechtigung für das Auftreten der erneuten Initialisierung für das Abonnement erteilt.

Rückgabecodewerte

0 (Erfolg) oder 1 (Fehler)

Hinweise

sp_repladdcolumn ist als veraltet markiert und wird nur zum Sicherstellen der Abwärtskompatibilität bereitgestellt. Das Hinzufügen einer Spalte zu einem replizierten Tabellenartikel sollte durch Ausführen von DDL-Befehlen (Data Definition Language) für die veröffentlichte Tabelle erfolgen. Bei der Replikation werden diese DDL-Befehle automatisch repliziert, sofern die DDL-Replikation aktiviert wurde. Weitere Informationen finden Sie unter Vornehmen von Schemaänderungen in Veröffentlichungsdatenbanken.

sp_repladdcolumn ist für die Weitergabe von DDL-Änderungen von Wiederveröffentlichungsabonnenten, die eine frühere Version von SQL Server 2000-Abonnenten ausführen, weiterhin erforderlich.

sp_repladdcolumn wird für alle Replikationstypen verwendet.

Beim Verwenden von sp_repladdcolumn gilt Folgendes: Wenn eine Schemaänderung an einem Artikel vorgenommen wurde, der zu einer Veröffentlichung gehört, die ein DTS-Paket (Data Transformation Services) verwendet, wird die Schemaänderung nicht an den Abonnenten weitergegeben, und die benutzerdefinierten Prozeduren für INSERT/UPDATE/DELETE werden auf dem Abonnenten nicht erneut generiert. Der Benutzer muss das DTS-Paket manuell erneut generieren und die entsprechende Schemaänderung auf den Abonnenten vornehmen. Wenn die Schemaaktualisierung nicht angewendet wird, wird der Verteilungs-Agent möglicherweise beim Anwenden der nachfolgenden Änderungen einen Fehler erzeugen. Bevor Sie eine Schemaänderung durchführen, stellen Sie sicher, dass keine ausstehenden Transaktionen zum Übermitteln vorhanden sind.

Wird typetext ein Standardwert zugewiesen, bei dem es sich um eine nicht deterministische Funktion handelt (Beispiel: 'datetime not null default getdate()'), kann dies nach dem Hinzufügen der neuen Spalte zu Nichtkonvergenz führen, weil die Funktion auf dem Abonnenten ausgeführt wird, um einen Standardwert in die Spalte zu laden.

Timestamp- und berechnete Spalten werden für Veröffentlichungen im Zeichenmodus herausgefiltert. Wenn eine Timestamp- oder berechnete Spalte mithilfe von sp_repladdcolumn hinzugefügt wird, erhalten die Abonnements dieser Veröffentlichungen die neue Spalte nicht.

Wichtiger HinweisWichtig

Nach der Ausführung von sp_repladdcolumn sollte eine Sicherung der Veröffentlichungsdatenbank durchgeführt werden. Wenn dies versäumt wird, kann es zu einem Mergefehler führen, nachdem die Veröffentlichungsdatenbank wiederhergestellt wurde.

Berechtigungen

Nur Mitglieder der festen Serverrolle sysadmin und der festen Datenbankrolle db_owner können sp_repladdcolumn ausführen.