Каскадное удаление - это то, от чего я всегда держусь подальше. Это крутая концепция для изучения, но я еще не видел серьезной реализации Cascading Deletes.
Прочитав мою напыщенную речь, продолжайте читать ..
Когда вы выполняете оператор удаления, SQL Server сначала идентифицирует все строки, которые должны быть удалены. Он строит структуру всех таблиц, которые должны быть включены, и всех строк, которые будут удалены.
Любая таблица не может появляться в этом списке более одного раза, и должен быть один путь к дочернему дереву из родительского дерева.
Я думаю, что вы столкнулись с этой проблемой, потому что у вас есть самостоятельное соединение на столе клиентов.
Вам нужно будет вручную удалить дочерние строки, а затем удалить родительский.
FWIW, я бы не отказывался от отношения с внешним ключом и пытался настроить триггеры (как предлагает статья в КБ ниже).
http://support.microsoft.com/kb/321843