Rows pass only when every listed rule passes.

highlighted = computed this step

Which rows pass?

After rules are listed, each row gets a pass or fail result.

row result=pass or fail\text{row result}=\text{pass or fail}

Read the pass/fail table

The compiler marks 1 row as pass and 2 rows as fail.

fail rows=2\text{fail rows}=2

Check examples are tiny finite row-rule validations; SQL dialects, DDL timing, CHECK expression languages, enforcement strategy, performance, and product behavior are out of scope.

Which rows pass?: tableidstatusqty1new22NULL43bad9 row rulesnamekindcolumndetailstatus_requirednot_nullstatusnot NULLstatus_domainallowed_valuesstatus[done, new]qty_rangebetweenqty1..5 row pass/failrowstatusfailed rules0pass[]1fail[status_required, status_domain]2fail[status_domain, qty_range] violationsrowrulecolumnvaluereason1status_requiredstatusNULLNULL1status_domainstatusNULLnot_allowed2status_domainstatusbadnot_allowed2qty_rangeqty9above_max check factsfactvaluerowCount3ruleCount3passCount1failCount2violationCount4allRowsPassnonullMeansMissingyes

Connect rows to rules

The failed-rules column names exactly which rule rejected each row.

failed rule names\text{failed rule names}

Summary

A row can fail more than one rule, and each violation remains visible.

not just a label\text{not just a label}