sys.sp_changemergearticle (Transact-SQL)

Van toepassing op:SQL Server

Verandert de eigenschappen van een samengevoegd artikel. Deze opgeslagen procedure wordt uitgevoerd bij Publisher in de publicatiedatabase.

Transact-SQL syntaxis-conventies

Syntax

sys.sp_changemergearticle
    [ @publication = ] N'publication'
    , [ @article = ] N'article'
    [ , [ @property = ] N'property' ]
    [ , [ @value = ] N'value' ]
    [ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
    [ , [ @force_reinit_subscription = ] force_reinit_subscription ]
[ ; ]

Arguments

[ @publication = ] N'publicatie'

De naam van de publicatie waarin het artikel staat. @publication is sysname, zonder standaard.

[ @article = ] N'artikel'

De naam van het artikel moet worden veranderd. @article is sysname, zonder standaard.

[ @property = ] N'eigenschap'

De eigenschap moet worden aangepast voor het betreffende artikel en de publicatie. @property is een systeemnaam en kan een van de waarden zijn die in de volgende tabel staan.

[ @value = ] N'waarde'

De nieuwe waarde voor de gespecificeerde eigenschap. @value is nvarchar(2000) en kan een van de waarden zijn die in de volgende tabel worden vermeld.

Deze tabel beschrijft de eigenschappen van artikelen en de waarden voor die eigenschappen.

Property Values Description
allow_interactive_resolver true Maakt het gebruik van een interactieve resolver voor het artikel mogelijk.
false Schakelt het gebruik van een interactieve resolver voor het artikel uit.
article_resolver Aangepaste resolver voor het artikel. Gilt alleen voor een tabelartikel.
check_permissions (bitmap) 0x00 Tabelniveau-machtigingen worden niet gecontroleerd.
0x10 Tabelniveau-rechten worden gecontroleerd bij de Publisher voordat INSERT verklaringen bij de Subscriber worden toegepast bij de Publisher.
0x20 Tabelniveau-rechten worden gecontroleerd bij de Publisher voordat UPDATE verklaringen bij de Subscriber worden toegepast bij de Publisher.
0x40 Tabelniveau-rechten worden gecontroleerd bij de Publisher voordat DELETE verklaringen bij de Subscriber worden toegepast bij de Publisher.
column_tracking true Schakelt kolomniveau-tracking in. Gilt alleen voor een tabelartikel.

Opmerking: Kolomniveau-tracking kan niet worden gebruikt bij het publiceren van tabellen met meer dan 246 kolommen.
false Schakelt kolomniveautracking uit en laat conflictdetectie op rijniveau staan. Gilt alleen voor een tabelartikel.
compensate_for_errors true Compenserende acties worden uitgevoerd wanneer er fouten optreden tijdens de synchronisatie. Voor meer informatie, zie sp_addmergearticle.
false Compenserende acties worden niet uitgevoerd, wat het standaardgedrag is. Voor meer informatie, zie sp_addmergearticle.

Belangrijk: Hoewel data in de getroffen rijen misschien niet convergent lijkt, kunnen er zodra je fouten aanpakt wijzigingen worden toegepast en convergeert de data. Als de brontabel van een artikel al in een andere publicatie is gepubliceerd, dan moet de waarde van compensate_for_errors voor beide artikelen hetzelfde zijn.
creation_script Pad en naam van een optioneel artikelschema-script dat wordt gebruikt om het artikel te maken in de abonnementsdatabase.
delete_tracking true DELETE statements worden gerepliceerd, wat het standaardgedrag is.
false DELETE Uitspraken worden niet gerepliceerd.

Belangrijk: Instellen delete_tracking op false resulteert in non-convergentie, en verwijderde rijen moeten handmatig worden verwijderd.
description Beschrijvende vermelding van het artikel.
destination_owner Naam van de eigenaar van het object in de abonnementsdatabase, als het niet de dbo is.
identity_range bigint die de bereikgrootte specificeert die gebruikt moet worden bij het toewijzen van nieuwe identiteitswaarden als het artikel op heeft identityrangemanagementoption gezet auto of auto_identity_range op trueheeft gezet. Geldt alleen voor een tabelartikel. Voor meer informatie, zie de sectie "Merge Replication" van Replicate Identity Columns.
identityrangemanagementoption manual Schakelt automatisch identiteitsbereik beheer uit. Markeert identiteitskolommen met NOT FOR REPLICATION om handmatige afhandeling van identiteitsbereik mogelijk te maken. Zie Identiteitskolommen repliceren voor meer informatie.
none Schakelt alle identiteitsbereik uit.
logical_record_level_conflict_detection true Er wordt een conflict gedetecteerd als er ergens in het logische record wijzigingen worden aangebracht. Vereist dat deze logical_record_level_conflict_resolution is ingesteld op true.
false Standaard conflictdetectie wordt gebruikt zoals gespecificeerd door column_tracking.
logical_record_level_conflict_resolution true Het volledige winnende logische record overschrijft het verliezende logische record.
false Winnende rijen zijn niet beperkt tot het logische record.
partition_options 0 De filtering voor het artikel is ofwel statisch of levert geen unieke deelverzameling data op voor elke partitie, dat wil zeggen een "overlappende" partitie.
1 De partities overlappen elkaar en DML-updates die bij de abonnee worden uitgevoerd kunnen de partitie waartoe een rij behoort niet wijzigen.
2 De filtering voor het artikel levert niet-overlappende partities op, maar meerdere abonnees kunnen dezelfde partitie ontvangen.
3 De filtering voor het artikel levert niet-overlappende partities op die uniek zijn voor elk abonnement.

Opmerking: Als je een waarde van 3 voor partition_optionsspecificeert, kan er slechts één abonnement zijn voor elke datapartitie in dat artikel. Als een tweede abonnement wordt aangemaakt, waarbij het filtercriterium van het nieuwe abonnement wordt opgelost op dezelfde partitie als het bestaande abonnement, wordt het bestaande abonnement verwijderd.
pre_creation_command none Als de tabel al bestaat bij de abonnee, wordt er geen actie ondernomen.
delete Voert een verwijdering uit op basis van de WHERE-clausule in het subsetfilter.
drop Ze laat de tafel vallen voordat hij hem opnieuw aanmaakt.
truncate Slaat de bestemmingstabel af.
processing_order Int die de verwerkingsvolgorde van artikelen in een samengevoegde publicatie aangeeft.
pub_identity_range bigint die de bereikgrootte specificeert die aan een abonnee met een serverabonnement is toegewezen als het artikel is identityrangemanagementoption ingesteld op auto of auto_identity_range op true. Deze identiteitsreeks is gereserveerd voor een heruitgevende abonnee, die aan zijn eigen abonnees kan worden toegewezen. Geldt alleen voor een tabelartikel. Voor meer informatie, zie de sectie "Merge Replication" van Replicate Identity Columns.
published_in_tran_pub true Het artikel wordt ook gepubliceerd in een transactionele publicatie.
false Het artikel wordt niet ook gepubliceerd in een transactionele publicatie.
resolver_info Wordt gebruikt om aanvullende informatie te specificeren die vereist is voor een aangepaste resolver. Sommige Microsoft Resolvers vereisen een kolom die als invoer voor de resolver wordt geleverd. resolver_infois nvarchar(255), met als standaard .NULL Voor meer informatie, zie Advanced Merge Replication Conflict - COM-Based Resolvers.
schema_option (bitmap) Zie de sectie Opmerkingen voor meer informatie.
0x00 Schakelt scripting uit door de Snapshot Agent en gebruikt het script dat in creation_scriptwordt geleverd.
0x01 Genereert het object creation script (CREATE TABLE, CREATE PROCEDURE, enzovoort).
0x10 Genereert een overeenkomstige geclusterde index.
0x20 Zet door gebruikers gedefinieerde datatypes om naar basisdatatypes bij de abonnee. Deze optie kan niet worden gebruikt wanneer er een CHECK of DEFAULT beperking is op een door de gebruiker gedefinieerde type (UDT) kolom, als een UDT-kolom deel uitmaakt van de primaire sleutel, of als een berekende kolom verwijst naar een UDT-kolom.
0x40 Genereert overeenkomstige niet-geclusterde indexen.
0x80 Bevat gedeclareerde referentieintegriteit op de primaire sleutels.
0x100 Repliceert gebruikerstriggers op een tabelartikel, indien gedefinieerd.
0x200 Repliceert FOREIGN KEY-beperkingen. Als de gerefereerde tabel geen deel uitmaakt van een publicatie, worden alle FOREIGN KEY-beperkingen op een gepubliceerde tabel niet gerepliceerd.
0x400 Repliceert CHECK-constraints.
0x800 Repliceert standaardinstellingen.
0x1000 Repliceert kolomniveau-collatie.
0x2000 Repliceert uitgebreide eigenschappen die horen bij het bronobject van het gepubliceerde artikel.
0x4000 Repliceert unieke sleutels als gedefinieerd op een tabelartikel.
0x8000 Genereert ALTER TABLE statements bij het scripten van constraints.
0x10000 Repliceert CHECK-constraints als NIET VOOR REPLICATIE zodat de constraints niet worden afgedwongen tijdens synchronisatie.
0x20000 Repliceert FOREIGN KEY-beperkingen als NIET VOOR REPLICATIE zodat de beperkingen niet worden afgedwongen tijdens synchronisatie.
0x40000 Repliceert bestandsgroepen die gekoppeld zijn aan een gepartitioneerde tabel of index.
0x80000 Repliceert het partitieschema voor een gepartitioneerde tabel.
0x100000 Repliceert het partitieschema voor een gepartitioneerde index.
0x200000 Repliceert tabelstatistieken.
0x400000 Repliceert standaard bindings
0x800000 Repliceert regelbindingen
0x1000000 Repliceert de volledige tekstindex
0x2000000 XML-schemacollecties die aan xml-kolommen zijn gebonden, worden niet gerepliceerd.
0x4000000 Repliceert indexen op xml-kolommen .
0x8000000 Maak schema's die nog niet aanwezig zijn bij de abonnee.
0x10000000 Zet xml-kolommen om naar ntext op de abonnee.
0x20000000 Zet grote objectdatatypes (nvarchar(max),varchar(max) en varbinary(max)) die in SQL Server 2005 (9.x) werden geïntroduceerd om naar datatypes die worden ondersteund op SQL Server 2000 (8.x).
0x40000000 Repliceer permissies.
0x80000000 Probeer afhankelijkheden van objecten die geen deel uitmaken van de publicatie los te laten.
0x100000000 Gebruik deze optie om het FILESTREAM-attribuut te repliceren, als het is opgegeven op varbinary(max) -kolommen. Specificeer deze optie niet als je tabellen repliceert naar SQL Server 2005 (9.x) abonnees. Het repliceren van tabellen met FILESTREAM-kolommen naar SQL Server 2000 (8.x) abonnees wordt niet ondersteund, ongeacht hoe deze schema-optie is ingesteld. Zie gerelateerde optie 0x800000000.
0x200000000 Zet datum- en tijddatatypes (datum, tijd, datetimeoffset en datetime2) die in SQL Server 2008 (10.0.x) zijn geïntroduceerd om naar datatypes die worden ondersteund op eerdere versies van SQL Server.
0x400000000 Repliceert de compressieoptie voor data en indexen. Zie Gegevenscompressie voor meer informatie.
0x800000000 Stel deze optie in om FILESTREAM-gegevens op te slaan in een eigen bestandsgroep bij de abonnee. Als deze optie niet is ingesteld, wordt FILESTREAM-data opgeslagen in de standaard bestandsgroep. Replicatie maakt geen bestandsgroepen aan; daarom moet je, als je deze optie instelt, de bestandsgroep aanmaken voordat je de snapshot toepast op de Subscriber. Voor meer informatie over hoe je objecten maakt voordat je de snapshot toepast, zie Scripts uitvoeren vóór en na het toepassen van de snapshot.

Zie gerelateerde optie 0x100000000.
0x1000000000 Zet common language runtime (CLR) gebruikersgedefinieerde types (UDT's) om naar varbinary(max) zodat kolommen van type UDT kunnen worden gerepliceerd naar abonnees die SQL Server 2005 (9.x) draaien.
0x2000000000 Zet het datatype hierarchyid om naar varbinary(max) zodat kolommen van type hierarchyid kunnen worden gerepliceerd naar abonnees die SQL Server 2005 (9.x) draaien. Voor meer informatie over hoe je hierarchyid-kolommen gebruikt in gerepliceerde tabellen, zie hierarchyid data type method reference.
0x4000000000 Repliceert alle gefilterde indexen in de tabel. Zie Gefilterde indexen maken voor meer informatie over gefilterde indexen.
0x8000000000 Zet de geografie- en geometrie-datatypes om naar varbinary(max) zodat kolommen van deze typen kunnen worden gerepliceerd naar abonnees die SQL Server 2005 (9.x) draaien.
0x10000000000 Repliceert indexen op kolommen van type, geografie en geometrie.
NULL Het systeem genereert automatisch een geldige schema-optie voor het artikel.
status active Het initiële verwerkingsscript om de tabel te publiceren wordt uitgevoerd.
unsynced Het initiële verwerkingsscript om de tabel te publiceren wordt uitgevoerd de volgende keer dat de Snapshot Agent draait.
stream_blob_columns true Een datastroomoptimalisatie wordt gebruikt bij het repliceren van binaire kolommen van grote objecten. Echter, bepaalde merge-replicatiefunctionaliteiten, zoals logische records, kunnen nog steeds voorkomen dat de stroomoptimalisatie wordt gebruikt. stream_blob_columns is ingesteld op true wanneer FILESTREAM is ingeschakeld. Dit maakt het mogelijk om replicatie van FILESTREAM-gegevens optimaal te laten functioneren en het geheugengebruik te verminderen. Om FILESTREAM-tabelartikelen te dwingen geen blob streaming te gebruiken, zet stream_blob_columns je op false.

Belangrijk: Het inschakelen van deze geheugenoptimalisatie kan de prestaties van de Merge Agent tijdens synchronisatie schaden. Deze optie moet alleen worden gebruikt bij het repliceren van kolommen die megabytes aan data bevatten.
false De optimalisatie wordt niet gebruikt bij het repliceren van binaire kolommen van grote objecten.
subscriber_upload_options 0 Geen beperkingen op updates die bij een abonnee met een clientabonnement worden uitgevoerd; wijzigingen worden geüpload naar de Publisher. Het wijzigen van deze eigenschap kan vereisen dat bestaande abonnees opnieuw worden geïntialiseerd.
1 Wijzigingen zijn toegestaan bij een abonnee met een clientabonnement, maar ze worden niet geüpload naar de Publisher.
2 Wijzigingen zijn niet toegestaan bij een abonnee met een clientabonnement.
subset_filterclause WHERE-clausule die de horizontale filtering specificeert. Gilt alleen voor een tabelartikel.

Belangrijk: Om prestatieredenen raden we aan geen functies toe te passen op kolomnamen in geparametriseerde rijfilterclausules, zoals LEFT([MyColumn]) = SUSER_SNAME(). Als je HOST_NAME gebruikt in een filterclausule en de HOST_NAME waarde overschrijft, moet je mogelijk datatypes converteren met CONVERT. Voor meer informatie over best practices in dit geval, zie de sectie "Overschrijven van de HOST_NAME() Waarde" in Parameterized Filters - Parameterized Row Filters.
threshold Percentagewaarde gebruikt voor abonnees die SQL Server Compact of eerdere versies van SQL Server draaien. thresholdcontroleert wanneer de Merge Agent een nieuw identiteitsbereik toewijst. Wanneer het percentage waarden dat in de drempel is gespecificeerd wordt gebruikt, maakt de Merge Agent een nieuw identiteitsbereik aan. Gebruikt wanneer identityrangemanagementoption is ingesteld op auto of auto_identity_range is ingesteld op true. Geldt alleen voor een tabelartikel. Voor meer informatie, zie de sectie "Merge Replication" van Replicate Identity Columns.
verify_resolver_signature 1 De digitale handtekening op een aangepaste resolver wordt gecontroleerd om te bepalen of deze van een betrouwbare bron komt.
0 Digitale handtekening op een aangepaste resolver wordt niet geverifieerd om te bepalen of het van een betrouwbare bron komt.
NULL (standaard) Geeft de lijst met ondersteunde waarden voor @property terug.

[ @force_invalidate_snapshot = ] force_invalidate_snapshot

Erkent dat de actie die door deze opgeslagen procedure wordt uitgevoerd, een bestaande snapshot ongeldig kan maken. @force_invalidate_snapshot is bit, met een standaardwaarde van 0.

  • 0 specificeert dat wijzigingen in het merge-artikel de snapshot niet ongeldig maken. Als de opgeslagen procedure detecteert dat de wijziging een nieuwe snapshot vereist, ontstaat er een fout en worden er geen wijzigingen aangebracht.

  • 1 betekent dat wijzigingen in het merge-artikel ervoor kunnen zorgen dat de snapshot ongeldig wordt, en als er bestaande abonnementen zijn die een nieuwe snapshot vereisen, geeft het toestemming om de bestaande snapshot als verouderd te markeren en een nieuwe snapshot te genereren.

Zie de sectie Opmerkingen voor de eigenschappen die, wanneer gewijzigd, de aanmaak van een nieuwe snapshot vereisen.

[ @force_reinit_subscription = ] force_reinit_subscription

Erkent dat de actie die door deze opgeslagen procedure wordt ondernomen, mogelijk vereist dat bestaande abonnementen opnieuw worden geïntialiseerd. @force_reinit_subscription is bit, met een standaardwaarde van 0.

  • 0 specificeert dat wijzigingen in het merge-artikel niet leiden tot het opnieuw initialiseren van het abonnement. Als de opgeslagen procedure detecteert dat de wijziging vereist dat bestaande abonnementen opnieuw worden geïntialiseerd, treedt er een fout op en worden er geen wijzigingen aangebracht.

  • 1 betekent dat wijzigingen in het Merge-artikel ervoor zorgen dat bestaande abonnementen opnieuw worden geïntialiseerd, en geeft toestemming voor de abonnementsherinitialisatie.

Zie de sectie Opmerkingen voor de eigenschappen die, wanneer gewijzigd, vereisen dat alle bestaande abonnementen opnieuw worden geïntinitiseerd.

Codewaarden retourneren

0 (geslaagd) of 1 (mislukt).

Remarks

sp_changemergearticle wordt gebruikt bij merge-replicatie.

Omdat sp_changemergearticle wordt gebruikt om artikeleigenschappen te wijzigen die oorspronkelijk zijn gespecificeerd met sp_addmergearticle, zie sp_addmergearticle voor meer informatie over deze eigenschappen.

Het wijzigen van de volgende eigenschappen vereist dat er een nieuwe snapshot wordt gegenereerd, en je moet een waarde van 1 specificeren voor de @force_invalidate_snapshot parameter:

  • check_permissions
  • column_tracking
  • destination_owner
  • pre_creation_command
  • schema_options
  • subset_filterclause

Het wijzigen van de volgende eigenschappen vereist dat bestaande abonnementen opnieuw worden geïntialiseerd, en je moet een waarde van 1 specificeren voor de @force_reinit_subscription-parameter :

  • check_permissions
  • column_tracking
  • destination_owner
  • pre_creation_command
  • identityrangemanagementoption
  • subscriber_upload_options
  • subset_filterclause
  • creation_script
  • schema_option
  • logical_record_level_conflict_detection
  • logical_record_level_conflict_resolution

Wanneer je een waarde van 3 voor partition_optionsspecificeert, wordt metadata opgeschoond telkens wanneer de Merge Agent draait en verloopt de gepartitioneerde snapshot sneller. Bij het gebruik van deze optie moet je overwegen door de abonnee gevraagde gepartitioneerde snapshot in te schakelen. Voor meer informatie, zie Create a Snapshot for a Merge Publication with Parameterized Filters.

Bij het instellen van de column_tracking eigenschap, als de tabel al is gepubliceerd in andere samenvoegpublicaties, moet de kolomregistratie gelijk zijn aan de waarde die door bestaande artikelen op basis van deze tabel wordt gebruikt. Deze parameter is alleen specifiek voor tabelartikelen.

Als meerdere publicaties artikelen publiceren die gebaseerd zijn op dezelfde onderliggende tabel, zorgt het wijzigen van de delete_tracking eigenschap of de compensate_for_errors eigenschap voor één artikel ervoor dat dezelfde wijziging wordt aangebracht bij de andere artikelen die op dezelfde tabel zijn gebaseerd.

Als de Publisher-login/gebruikersaccount die door het samenvoegproces wordt gebruikt niet de juiste tabelrechten heeft, worden de ongeldige wijzigingen als conflicten geregistreerd.

Wanneer je de waarde van schema_optionverandert, voert het systeem geen bitgewijze update uit. Dit betekent dat wanneer je stelt schema_option met sp_changemergearticle, bestaande bitinstellingen mogelijk uitgeschakeld zijn. Om de bestaande instellingen te behouden, moet je & (Bitwise EN) uitvoeren tussen de waarde die je instelt en de huidige waarde van schema_option, wat bepaald kan worden door sp_helpmergearticle uit te voeren.

Caution

Als je veel (misschien honderden) artikelen in een publicatie hebt en je uitvoert sp_changemergearticle voor een van de artikelen, kan het lang duren om het af te ronden.

Tabel voor geldige schema-optie

De volgende tabel beschrijft de toegestane schema_option waarden, afhankelijk van het type artikel.

Artikeltype Schema-optiewaarden
func schema only 0x01 en 0x2000
indexed view schema only 0x01, , 0x0400x0100, 0x2000, , , 0x40000, , en 0x10000000x200000
proc schema only 0x01 en 0x2000
table Alle opties.
view schema only 0x01, , 0x0400x0100, 0x2000, , , 0x40000, , en 0x10000000x200000

Examples

DECLARE @publication AS sysname;
DECLARE @article AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @article = N'SalesOrderHeader';

-- Enable column-level conflict tracking.
-- Changing this property requires that existing subscriptions
-- be reinitialized and that a new snapshot be generated.
USE [AdventureWorks2022]
EXEC sp_changemergearticle 
  @publication = @publication,
  @article = @article, 
  @property = N'column_tracking', 
  @value = N'true',
  @force_invalidate_snapshot = 1,
  @force_reinit_subscription = 1;
GO

Permissions

Alleen leden van de sysadmin-vaste serverrol of db_owner vaste databaserol kunnen uitvoeren sp_changemergearticle.