Creating and Modifying CHECK Constraints
You can create a CHECK constraint as part of the table definition when you create a table. If a table already exists, you can add a CHECK constraint. Tables and columns can contain multiple CHECK constraints.
If a CHECK constraint already exists, you can modify or delete it. For example, you may want to modify the expression that is used by the CHECK constraint on a column in the table.
Note
To modify a CHECK constraint, you must first delete the existing CHECK constraint and then re-create it with the new definition.
The following Transact-SQL example creates a new table, and then modifies the table by adding a CHECK constraint to the CreditRating column.
IF OBJECT_ID ('dbo.Vendors', 'U') IS NOT NULL
DROP TABLE dbo.Vendors;
GO
CREATE TABLE dbo.Vendors
(VendorID int PRIMARY KEY, VendorName nvarchar (50),
CreditRating tinyint)
GO
ALTER TABLE dbo.Vendors ADD CONSTRAINT CK_Vendor_CreditRating
CHECK (CreditRating >= 1 AND CreditRating <= 5)
Delete a CHECK constraint to remove the limitations on acceptable data values in the column or columns included in the constraint expression.
To create a CHECK constraint when you create a table
To create a CHECK constraint on an existing table
To delete a CHECK constraint
Forcing a CHECK Constraint by Using WITH NOCHECK
When a CHECK constraint is added to an existing table, the CHECK constraint can apply to new data only or to existing data. By default, the CHECK constraint applies to both existing data and any new data. Use the WITH NOCHECK option of the ALTER TABLE statement to apply the new constraint only to newly added data. This option is useful when the existing data already meets the new CHECK constraint, or when a business rule requires the constraint to be enforced only from this point forward.
For example, an old constraint may require that postal codes be limited to five digits but a new constraint requires nine-digit postal codes. Old data with five-digit postal codes is still valid and will coexist with new data that contains nine-digit postal codes. Therefore, only new data should be checked against the new constraint.
However, you should be careful when you add a constraint without checking existing data because this bypasses the controls in the Database Engine that enforce the integrity rules for the table.
To prevent checking of existing data when you create a CHECK constraint
Disabling CHECK Constraints
You can disable existing CHECK constraints for specific operations, such as INSERT operations, UPDATE operations, and replication processing.
INSERT and UPDATE statements
Disabling a CHECK constraint enables data in the table to be modified without being validated by the constraints. Disable a CHECK constraint during INSERT and UPDATE statements if new data will violate the constraint or if the constraint should apply only to the data already in the database.
Replication processing
Disable a CHECK constraint during replication if the constraint is specific to the source database. When a table is replicated, the table definition and data are copied from the source database to a destination database. These two databases are typically, but not necessarily, on separate servers. If the CHECK constraints specific to the source database are not disabled, they may unnecessarily prevent new data from being entered in the destination database. For more information, see Controlling Constraints, Identities, and Triggers with NOT FOR REPLICATION.
To disable a CHECK constraint for INSERT and UPDATE statements
To disable a CHECK constraint for replication
To obtain information about CHECK constraints