SA0048 : Table does not have a primary key or unique key |
![]() |
Ensure each table has a primary key or unique constraint to maintain row uniqueness and data integrity.

In SQL Server databases, having a primary key or a unique key defined for each table is crucial for ensuring data integrity and preventing the insertion of duplicate rows. These keys enforce the uniqueness of the records in a table, which is a fundamental aspect of database design and operation.
For example:
1-- Table without primary or unique key 2CREATE TABLE Orders ( 3 OrderID int, 4 CustomerID int, 5 OrderDate datetime 6);
This table definition lacks a primary or unique key, which can lead to issues such as duplicate entries, making data management and retrieval inefficient and error-prone. SQL Server relies on these keys for indexing and optimizing queries, meaning their absence can result in slower query performance and more complex data maintenance.
-
Allows duplicate rows, leading to potential data inconsistency.
-
Reduces query optimization and indexing efficiency, impacting performance.

Create a primary or unique key for tables lacking these constraints to ensure data integrity and performance efficiency.
Follow these steps to address the issue:
-
Identify the table that lacks a primary or unique key, such as the Orders table in the example.
-
Decide on a column or set of columns that should be unique in the table to serve as the primary key. In this case, OrderID can be used as it uniquely identifies each order.
-
Alter the table to add a primary key constraint to the identified column. Use the ALTER TABLE command in T-SQL.
For example:
1-- Adding a primary key to the Orders table 2ALTER TABLE Orders 3ADD CONSTRAINT PK_Orders PRIMARY KEY (OrderID);

The rule has a ContextOnly scope and is applied only on current server and database schema.

Name | Description | Default Value |
---|---|---|
RequiredKeyType |
Parameter specifies the type of key for which the rule will look. |
PrimaryOrUnique |

The rule requires Analysis Context. If context is missing, the rule will be skipped during analysis.


Performance Rules, Bugs

There is no additional info for this rule.
