Published on

January 16, 2019

Understanding SQL Server Replication: Triggers, Indexes, Constraints, and Foreign Keys

SQL Server replication is a powerful feature that allows you to replicate data from a publisher to a subscriber database and vice versa. However, there are certain concepts and behaviors that you need to be aware of when it comes to replicating triggers, indexes, constraints, and foreign keys.

Before Snapshot

Before adding a table to merge replication, it’s important to understand how triggers, indexes, constraints, and foreign keys behave. Let’s take a look at an example:

CREATE TABLE PARENT1 (
    ID INT CONSTRAINT PK_PARENT1 PRIMARY KEY
)

CREATE TABLE PARENT2 (
    ID INT CONSTRAINT PK_PARENT2 PRIMARY KEY
)

CREATE TABLE CHILD1 (
    ID1 INT,
    ID2 INT,
    CONSTRAINT FK1_CHILD1 FOREIGN KEY (ID1) REFERENCES PARENT1 (ID)
)

CREATE TABLE KEYCHECK (
    ID INT
)

CREATE NONCLUSTERED INDEX [NonClusteredIndex1] ON [dbo].[PARENT1] ([ID] ASC)

CREATE TRIGGER PARENT1_TRIG ON [dbo].[PARENT1] FOR INSERT NOT FOR REPLICATION AS
BEGIN
    PRINT 'Test'
END

ALTER TABLE PARENT1 ADD CHECK (ID <> 10)

ALTER TABLE PARENT1 ADD CONSTRAINT DF_PARENT1 DEFAULT 0 FOR ID

In this example, we have created tables, triggers, indexes, constraints, and foreign keys before adding them to merge replication. It’s important to note that these objects will be replicated to the subscribers when the initial snapshot is applied.

After Snapshot

Once the initial snapshot is applied and the data is being replicated bidirectionally, we need to understand how these objects behave:

Triggers

If a trigger is created after the snapshot is applied, it will not be replicated to the subscribers. If you want the trigger to be present on the subscriber, you need to create it manually on the subscriber.

However, if an existing trigger is modified on the publisher, the modification will be replicated to the subscriber. Similarly, if a trigger is dropped on the publisher, it will not be replicated to the subscriber.

Constraints

Newly created default and check constraints will be replicated to the subscribers. However, if an existing constraint is dropped on the publisher, it will not be replicated to the subscriber.

Indexes

Newly created non-clustered indexes will not be replicated to the subscribers. If an existing index is disabled or dropped on the publisher, it will not be replicated to the subscriber.

Foreign Keys

Newly created foreign keys will be replicated to the subscribers. If an existing foreign key is dropped on the publisher, it will be replicated to the subscriber.

Conclusion

Understanding how triggers, indexes, constraints, and foreign keys behave during SQL Server replication is crucial for successful replication. It’s important to create deployment/upgrade scripts that are replication compatible and to manually create or modify objects on the subscriber when necessary.

By being aware of these behaviors and following best practices, you can ensure a smooth and efficient SQL Server replication process.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.